€•†eŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ+/translations/zh_CN/firmware-guide/acpi/osi”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/zh_TW/firmware-guide/acpi/osi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/it_IT/firmware-guide/acpi/osi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ja_JP/firmware-guide/acpi/osi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ko_KR/firmware-guide/acpi/osi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/sp_SP/firmware-guide/acpi/osi”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒE/var/lib/git/docbuild/linux/Documentation/firmware-guide/acpi/osi.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒACPI _OSI and _REV methods”h]”hŒACPI _OSI and _REV methods”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hXAn ACPI BIOS can use the "Operating System Interfaces" method (_OSI) to find out what the operating system supports. Eg. If BIOS AML code includes _OSI("XYZ"), the kernel's AML interpreter can evaluate that method, look to see if it supports 'XYZ' and answer YES or NO to the BIOS.”h]”hX'An ACPI BIOS can use the “Operating System Interfaces†method (_OSI) to find out what the operating system supports. Eg. If BIOS AML code includes _OSI(“XYZâ€), the kernel’s AML interpreter can evaluate that method, look to see if it supports ‘XYZ’ and answer YES or NO to the BIOS.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒXThe ACPI _REV method returns the "Revision of the ACPI specification that OSPM supports"”h]”hŒ\The ACPI _REV method returns the “Revision of the ACPI specification that OSPM supports—…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhÊ)”}”(hŒ…This document explains how and why the BIOS and Linux should use these methods. It also explains how and why they are widely misused.”h]”hŒ…This document explains how and why the BIOS and Linux should use these methods. It also explains how and why they are widely misused.”…””}”(hhçhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒHow to use _OSI”h]”hŒHow to use _OSI”…””}”(hhøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhõhžhhŸh³h KubhÊ)”}”(hŒÝLinux runs on two groups of machines -- those that are tested by the OEM to be compatible with Linux, and those that were never tested with Linux, but where Linux was installed to replace the original OS (Windows or OSX).”h]”hŒÝLinux runs on two groups of machines -- those that are tested by the OEM to be compatible with Linux, and those that were never tested with Linux, but where Linux was installed to replace the original OS (Windows or OSX).”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhõhžhubhÊ)”}”(hXùThe larger group is the systems tested to run only Windows. Not only that, but many were tested to run with just one specific version of Windows. So even though the BIOS may use _OSI to query what version of Windows is running, only a single path through the BIOS has actually been tested. Experience shows that taking untested paths through the BIOS exposes Linux to an entire category of BIOS bugs. For this reason, Linux _OSI defaults must continue to claim compatibility with all versions of Windows.”h]”hXùThe larger group is the systems tested to run only Windows. Not only that, but many were tested to run with just one specific version of Windows. So even though the BIOS may use _OSI to query what version of Windows is running, only a single path through the BIOS has actually been tested. Experience shows that taking untested paths through the BIOS exposes Linux to an entire category of BIOS bugs. For this reason, Linux _OSI defaults must continue to claim compatibility with all versions of Windows.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhõhžhubhÊ)”}”(hXcBut Linux isn't actually compatible with Windows, and the Linux community has also been hurt with regressions when Linux adds the latest version of Windows to its list of _OSI strings. So it is possible that additional strings will be more thoroughly vetted before shipping upstream in the future. But it is likely that they will all eventually be added.”h]”hXeBut Linux isn’t actually compatible with Windows, and the Linux community has also been hurt with regressions when Linux adds the latest version of Windows to its list of _OSI strings. So it is possible that additional strings will be more thoroughly vetted before shipping upstream in the future. But it is likely that they will all eventually be added.”…””}”(hj"hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K#hhõhžhubhÊ)”}”(hŒÁWhat should an OEM do if they want to support Linux and Windows using the same BIOS image? Often they need to do something different for Linux to deal with how Linux is different from Windows.”h]”hŒÁWhat should an OEM do if they want to support Linux and Windows using the same BIOS image? Often they need to do something different for Linux to deal with how Linux is different from Windows.”…””}”(hj0hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K)hhõhžhubhÊ)”}”(hX In this case, the OEM should create custom ASL to be executed by the Linux kernel and changes to Linux kernel drivers to execute this custom ASL. The easiest way to accomplish this is to introduce a device specific method (_DSM) that is called from the Linux kernel.”h]”hX In this case, the OEM should create custom ASL to be executed by the Linux kernel and changes to Linux kernel drivers to execute this custom ASL. The easiest way to accomplish this is to introduce a device specific method (_DSM) that is called from the Linux kernel.”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K-hhõhžhubhÊ)”}”(hŒêIn the past the kernel used to support something like: _OSI("Linux-OEM-my_interface_name") where 'OEM' is needed if this is an OEM-specific hook, and 'my_interface_name' describes the hook, which could be a quirk, a bug, or a bug-fix.”h]”hŒöIn the past the kernel used to support something like: _OSI(“Linux-OEM-my_interface_nameâ€) where ‘OEM’ is needed if this is an OEM-specific hook, and ‘my_interface_name’ describes the hook, which could be a quirk, a bug, or a bug-fix.”…””}”(hjLhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K2hhõhžhubhÊ)”}”(hXKHowever this was discovered to be abused by other BIOS vendors to change completely unrelated code on completely unrelated systems. This prompted an evaluation of all of its uses. This uncovered that they aren't needed for any of the original reasons. As such, the kernel will not respond to any custom Linux-* strings by default.”h]”hXMHowever this was discovered to be abused by other BIOS vendors to change completely unrelated code on completely unrelated systems. This prompted an evaluation of all of its uses. This uncovered that they aren’t needed for any of the original reasons. As such, the kernel will not respond to any custom Linux-* strings by default.”…””}”(hjZhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K8hhõhžhubhÊ)”}”(hŒ8That was easy. Read on, to find out how to do it wrong.”h]”hŒ8That was easy. Read on, to find out how to do it wrong.”…””}”(hjhhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K>hhõhžhubeh}”(h]”Œhow-to-use-osi”ah ]”h"]”Œhow to use _osi”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒBefore _OSI, there was _OS”h]”hŒBefore _OSI, there was _OS”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj~hžhhŸh³h KAubhÊ)”}”(hŒhACPI 1.0 specified "_OS" as an "object that evaluates to a string that identifies the operating system."”h]”hŒpACPI 1.0 specified “_OS†as an “object that evaluates to a string that identifies the operating system.—…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KChj~hžhubhÊ)”}”(hŒŒThe ACPI BIOS flow would include an evaluation of _OS, and the AML interpreter in the kernel would return to it a string identifying the OS:”h]”hŒŒThe ACPI BIOS flow would include an evaluation of _OS, and the AML interpreter in the kernel would return to it a string identifying the OS:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KFhj~hžhubhÊ)”}”(hŒ{Windows 98, SE: "Microsoft Windows" Windows ME: "Microsoft WindowsME:Millennium Edition" Windows NT: "Microsoft Windows NT"”h]”hŒ‡Windows 98, SE: “Microsoft Windows†Windows ME: “Microsoft WindowsME:Millennium Edition†Windows NT: “Microsoft Windows NT—…””}”(hj«hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KIhj~hžhubhÊ)”}”(hŒéThe idea was on a platform tasked with running multiple OS's, the BIOS could use _OS to enable devices that an OS might support, or enable quirks or bug workarounds necessary to make the platform compatible with that pre-existing OS.”h]”hŒëThe idea was on a platform tasked with running multiple OS’s, the BIOS could use _OS to enable devices that an OS might support, or enable quirks or bug workarounds necessary to make the platform compatible with that pre-existing OS.”…””}”(hj¹hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KMhj~hžhubhÊ)”}”(hXjBut _OS had fundamental problems. First, the BIOS needed to know the name of every possible version of the OS that would run on it, and needed to know all the quirks of those OS's. Certainly it would make more sense for the BIOS to ask *specific* things of the OS, such "do you support a specific interface", and thus in ACPI 3.0, _OSI was born to replace _OS.”h]”(hŒðBut _OS had fundamental problems. First, the BIOS needed to know the name of every possible version of the OS that would run on it, and needed to know all the quirks of those OS’s. Certainly it would make more sense for the BIOS to ask ”…””}”(hjÇhžhhŸNh NubhŒemphasis”“”)”}”(hŒ *specific*”h]”hŒspecific”…””}”(hjÑhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÇubhŒv things of the OS, such “do you support a specific interfaceâ€, and thus in ACPI 3.0, _OSI was born to replace _OS.”…””}”(hjÇhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KRhj~hžhubhÊ)”}”(hŒÑ_OS was abandoned, though even today, many BIOS look for _OS "Microsoft Windows NT", though it seems somewhat far-fetched that anybody would install those old operating systems over what came with the machine.”h]”hŒÕ_OS was abandoned, though even today, many BIOS look for _OS “Microsoft Windows NTâ€, though it seems somewhat far-fetched that anybody would install those old operating systems over what came with the machine.”…””}”(hjéhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KYhj~hžhubhÊ)”}”(hŒËLinux answers "Microsoft Windows NT" to please that BIOS idiom. That is the *only* viable strategy, as that is what modern Windows does, and so doing otherwise could steer the BIOS down an untested path.”h]”(hŒPLinux answers “Microsoft Windows NT†to please that BIOS idiom. That is the ”…””}”(hj÷hžhhŸNh NubjÐ)”}”(hŒ*only*”h]”hŒonly”…””}”(hjÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj÷ubhŒy viable strategy, as that is what modern Windows does, and so doing otherwise could steer the BIOS down an untested path.”…””}”(hj÷hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K^hj~hžhubeh}”(h]”Œbefore-osi-there-was-os”ah ]”h"]”Œbefore _osi, there was _os”ah$]”h&]”uh1h´hh¶hžhhŸh³h KAubhµ)”}”(hhh]”(hº)”}”(hŒ%_OSI is born, and immediately misused”h]”hŒ%_OSI is born, and immediately misused”…””}”(hj"hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KcubhÊ)”}”(hŒ…With _OSI, the *BIOS* provides the string describing an interface, and asks the OS: "YES/NO, are you compatible with this interface?"”h]”(hŒWith _OSI, the ”…””}”(hj0hžhhŸNh NubjÐ)”}”(hŒ*BIOS*”h]”hŒBIOS”…””}”(hj8hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj0ubhŒt provides the string describing an interface, and asks the OS: “YES/NO, are you compatible with this interface?—…””}”(hj0hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KehjhžhubhÊ)”}”(hŒûeg. _OSI("3.0 Thermal Model") would return TRUE if the OS knows how to deal with the thermal extensions made to the ACPI 3.0 specification. An old OS that doesn't know about those extensions would answer FALSE, and a new OS may be able to return TRUE.”h]”hXeg. _OSI(“3.0 Thermal Modelâ€) would return TRUE if the OS knows how to deal with the thermal extensions made to the ACPI 3.0 specification. An old OS that doesn’t know about those extensions would answer FALSE, and a new OS may be able to return TRUE.”…””}”(hjPhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhjhžhubhÊ)”}”(hŒ‘For an OS-specific interface, the ACPI spec said that the BIOS and the OS were to agree on a string of the form such as "Windows-interface_name".”h]”hŒ•For an OS-specific interface, the ACPI spec said that the BIOS and the OS were to agree on a string of the form such as “Windows-interface_nameâ€.”…””}”(hj^hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KmhjhžhubhÊ)”}”(hX8But two bad things happened. First, the Windows ecosystem used _OSI not as designed, but as a direct replacement for _OS -- identifying the OS version, rather than an OS supported interface. Indeed, right from the start, the ACPI 3.0 spec itself codified this misuse in example code using _OSI("Windows 2001").”h]”hX<But two bad things happened. First, the Windows ecosystem used _OSI not as designed, but as a direct replacement for _OS -- identifying the OS version, rather than an OS supported interface. Indeed, right from the start, the ACPI 3.0 spec itself codified this misuse in example code using _OSI(“Windows 2001â€).”…””}”(hjlhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KphjhžhubhÊ)”}”(hŒ,This misuse was adopted and continues today.”h]”hŒ,This misuse was adopted and continues today.”…””}”(hjzhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KvhjhžhubhÊ)”}”(hŒËLinux had no choice but to also return TRUE to _OSI("Windows 2001") and its successors. To do otherwise would virtually guarantee breaking a BIOS that has been tested only with that _OSI returning TRUE.”h]”hŒÏLinux had no choice but to also return TRUE to _OSI(“Windows 2001â€) and its successors. To do otherwise would virtually guarantee breaking a BIOS that has been tested only with that _OSI returning TRUE.”…””}”(hjˆhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KxhjhžhubhÊ)”}”(hŒ°This strategy is problematic, as Linux is never completely compatible with the latest version of Windows, and sometimes it takes more than a year to iron out incompatibilities.”h]”hŒ°This strategy is problematic, as Linux is never completely compatible with the latest version of Windows, and sometimes it takes more than a year to iron out incompatibilities.”…””}”(hj–hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K|hjhžhubhÊ)”}”(hXANot to be out-done, the Linux community made things worse by returning TRUE to _OSI("Linux"). Doing so is even worse than the Windows misuse of _OSI, as "Linux" does not even contain any version information. _OSI("Linux") led to some BIOS' malfunctioning due to BIOS writer's using it in untested BIOS flows. But some OEM's used _OSI("Linux") in tested flows to support real Linux features. In 2009, Linux removed _OSI("Linux"), and added a cmdline parameter to restore it for legacy systems still needed it. Further a BIOS_BUG warning prints for all BIOS's that invoke it.”h]”hX]Not to be out-done, the Linux community made things worse by returning TRUE to _OSI(“Linuxâ€). Doing so is even worse than the Windows misuse of _OSI, as “Linux†does not even contain any version information. _OSI(“Linuxâ€) led to some BIOS’ malfunctioning due to BIOS writer’s using it in untested BIOS flows. But some OEM’s used _OSI(“Linuxâ€) in tested flows to support real Linux features. In 2009, Linux removed _OSI(“Linuxâ€), and added a cmdline parameter to restore it for legacy systems still needed it. Further a BIOS_BUG warning prints for all BIOS’s that invoke it.”…””}”(hj¤hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K€hjhžhubhÊ)”}”(hŒ!No BIOS should use _OSI("Linux").”h]”hŒ%No BIOS should use _OSI(“Linuxâ€).”…””}”(hj²hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KŠhjhžhubhÊ)”}”(hX1The result is a strategy for Linux to maximize compatibility with ACPI BIOS that are tested on Windows machines. There is a real risk of over-stating that compatibility; but the alternative has often been catastrophic failure resulting from the BIOS taking paths that were never validated under *any* OS.”h]”(hX(The result is a strategy for Linux to maximize compatibility with ACPI BIOS that are tested on Windows machines. There is a real risk of over-stating that compatibility; but the alternative has often been catastrophic failure resulting from the BIOS taking paths that were never validated under ”…””}”(hjÀhžhhŸNh NubjÐ)”}”(hŒ*any*”h]”hŒany”…””}”(hjÈhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjÀubhŒ OS.”…””}”(hjÀhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KŒhjhžhubeh}”(h]”Œ#osi-is-born-and-immediately-misused”ah ]”h"]”Œ%_osi is born, and immediately misused”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kcubhµ)”}”(hhh]”(hº)”}”(hŒDo not use _REV”h]”hŒDo not use _REV”…””}”(hjëhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjèhžhhŸh³h K“ubhÊ)”}”(hŒuSince _OSI("Linux") went away, some BIOS writers used _REV to support Linux and Windows differences in the same BIOS.”h]”hŒySince _OSI(“Linuxâ€) went away, some BIOS writers used _REV to support Linux and Windows differences in the same BIOS.”…””}”(hjùhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K•hjèhžhubhÊ)”}”(hŒj_REV was defined in ACPI 1.0 to return the version of ACPI supported by the OS and the OS AML interpreter.”h]”hŒj_REV was defined in ACPI 1.0 to return the version of ACPI supported by the OS and the OS AML interpreter.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K˜hjèhžhubhÊ)”}”(hŒ†Modern Windows returns _REV = 2. Linux used ACPI_CA_SUPPORT_LEVEL, which would increment, based on the version of the spec supported.”h]”hŒ†Modern Windows returns _REV = 2. Linux used ACPI_CA_SUPPORT_LEVEL, which would increment, based on the version of the spec supported.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K›hjèhžhubhÊ)”}”(hŒ Unfortunately, _REV was also misused. eg. some BIOS would check for _REV = 3, and do something for Linux, but when Linux returned _REV = 4, that support broke.”h]”hŒ Unfortunately, _REV was also misused. eg. some BIOS would check for _REV = 3, and do something for Linux, but when Linux returned _REV = 4, that support broke.”…””}”(hj#hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KžhjèhžhubhÊ)”}”(hŒ¸In response to this problem, Linux returns _REV = 2 always, from mid-2015 onward. The ACPI specification will also be updated to reflect that _REV is deprecated, and always returns 2.”h]”hŒ¸In response to this problem, Linux returns _REV = 2 always, from mid-2015 onward. The ACPI specification will also be updated to reflect that _REV is deprecated, and always returns 2.”…””}”(hj1hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¢hjèhžhubeh}”(h]”Œdo-not-use-rev”ah ]”h"]”Œdo not use _rev”ah$]”h&]”uh1h´hh¶hžhhŸh³h K“ubhµ)”}”(hhh]”(hº)”}”(hŒApple Mac and _OSI("Darwin")”h]”hŒ Apple Mac and _OSI(“Darwinâ€)”…””}”(hjJhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjGhžhhŸh³h K§ubhÊ)”}”(hŒpOn Apple's Mac platforms, the ACPI BIOS invokes _OSI("Darwin") to determine if the machine is running Apple OSX.”h]”hŒvOn Apple’s Mac platforms, the ACPI BIOS invokes _OSI(“Darwinâ€) to determine if the machine is running Apple OSX.”…””}”(hjXhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K©hjGhžhubhÊ)”}”(hŒæLike Linux's _OSI("*Windows*") strategy, Linux defaults to answering YES to _OSI("Darwin") to enable full access to the hardware and validated BIOS paths seen by OSX. Just like on Windows-tested platforms, this strategy has risks.”h]”(hŒLike Linux’s _OSI(—…””}”(hjfhžhhŸNh NubjÐ)”}”(hŒ *Windows*”h]”hŒWindows”…””}”(hjnhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhjfubhŒÐâ€) strategy, Linux defaults to answering YES to _OSI(“Darwinâ€) to enable full access to the hardware and validated BIOS paths seen by OSX. Just like on Windows-tested platforms, this strategy has risks.”…””}”(hjfhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K¬hjGhžhubhÊ)”}”(hX3Starting in Linux-3.18, the kernel answered YES to _OSI("Darwin") for the purpose of enabling Mac Thunderbolt support. Further, if the kernel noticed _OSI("Darwin") being invoked, it additionally disabled all _OSI("*Windows*") to keep poorly written Mac BIOS from going down untested combinations of paths.”h]”(hŒâStarting in Linux-3.18, the kernel answered YES to _OSI(“Darwinâ€) for the purpose of enabling Mac Thunderbolt support. Further, if the kernel noticed _OSI(“Darwinâ€) being invoked, it additionally disabled all _OSI(—…””}”(hj†hžhhŸNh NubjÐ)”}”(hŒ *Windows*”h]”hŒWindows”…””}”(hjŽhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÏhj†ubhŒTâ€) to keep poorly written Mac BIOS from going down untested combinations of paths.”…””}”(hj†hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K±hjGhžhubhÊ)”}”(hX9The Linux-3.18 change in default caused power regressions on Mac laptops, and the 3.18 implementation did not allow changing the default via cmdline "acpi_osi=!Darwin". Linux-4.7 fixed the ability to use acpi_osi=!Darwin as a workaround, and we hope to see Mac Thunderbolt power management support in Linux-4.11.”h]”hX=The Linux-3.18 change in default caused power regressions on Mac laptops, and the 3.18 implementation did not allow changing the default via cmdline “acpi_osi=!Darwinâ€. Linux-4.7 fixed the ability to use acpi_osi=!Darwin as a workaround, and we hope to see Mac Thunderbolt power management support in Linux-4.11.”…””}”(hj¦hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K·hjGhžhubeh}”(h]”Œapple-mac-and-osi-darwin”ah ]”h"]”Œapple mac and _osi("darwin")”ah$]”h&]”uh1h´hh¶hžhhŸh³h K§ubeh}”(h]”Œacpi-osi-and-rev-methods”ah ]”h"]”Œacpi _osi and _rev methods”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jçŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÁj¾j{jxjjjåjâjDjAj¹j¶uŒ nametypes”}”(jÁ‰j{‰j‰jå‰jD‰j¹‰uh}”(j¾h¶jxhõjj~jâjjAjèj¶jGuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.