linux/drivers/acpi
Matthew Garrett 7bc5a2bad0 ACPI: Support _OSI("Darwin") correctly
Apple hardware queries _OSI("Darwin") in order to determine whether the
system is running OS X, and changes firmware behaviour based on the
answer.  The most obvious difference in behaviour is that Thunderbolt
hardware is forcibly powered down unless the system is running OS X. The
obvious solution would be to simply add Darwin to the list of supported
_OSI strings, but this causes problems.

Recent Apple hardware includes two separate methods for checking _OSI
strings. The first will check whether Darwin is supported, and if so
will exit. The second will check whether Darwin is supported, but will
then continue to check for further operating systems. If a further
operating system is found then later firmware code will assume that the
OS is not OS X.  This results in the unfortunate situation where the
Thunderbolt controller is available at boot time but remains powered
down after suspend.

The easiest way to handle this is to special-case it in the
Linux-specific OSI handling code. If we see Darwin, we should answer
true and then disable all other _OSI vendor strings.

The next problem is that the Apple PCI _OSC method has the following
code:

if (LEqual (0x01, OSDW ()))
  if (LAnd (LEqual (Arg0, GUID), NEXP)
    (do stuff)
  else
    (fail)
NEXP is a value in high memory and is presumably under the control of
the firmware. No methods sets it. The methods that are called in the "do
stuff" path are dummies. Unless there's some additional firmware call in
early boot, there's no way for this call to succeed - and even if it
does, it doesn't do anything.

The easiest way to handle this is simply to ignore it. We know which
flags would be set, so just set them by hand if the platform is running
in Darwin mode.

Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
[andreas.noever@gmail.com: merged two patches, do not touch ACPICA]
Signed-off-by: Andreas Noever <andreas.noever@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2014-09-24 23:31:12 +02:00
..
acpica ACPICA: ACPI 5.1: Add support for runtime validation of _DSD package. 2014-09-02 01:48:00 +02:00
apei ACPI and power management updates for 3.17-rc1 2014-08-06 20:34:19 -07:00
ac.c Revert "ACPI / AC: Remove AC's proc directory." 2014-07-07 01:13:46 +02:00
acpi_cmos_rtc.c ACPI / RTC: Fix CMOS RTC opregion handler accesses to wrong addresses 2014-09-08 15:38:41 +02:00
acpi_extlog.c ACPI and power management updates for 3.17-rc1 2014-08-06 20:34:19 -07:00
acpi_ipmi.c
acpi_lpss.c ACPI / LPSS: complete PM entries for LPSS power domain 2014-09-09 16:30:06 +02:00
acpi_memhotplug.c ACPI / scan: always register memory hotplug scan handler 2014-05-30 16:04:36 +02:00
acpi_pad.c ACPI / PAD: Use time_before() for time comparison 2014-05-27 01:38:23 +02:00
acpi_platform.c Merge branch 'acpi-platform' 2014-06-03 23:11:52 +02:00
acpi_pnp.c ACPI / PNP: Replace faulty is_hex_digit() by isxdigit() 2014-07-31 23:07:48 +02:00
acpi_processor.c ACPI: Don't use acpi_lapic in ACPI core code 2014-07-21 13:50:58 +02:00
battery.c Revert "ACPI / battery: fix wrong value of capacity_now reported when fully charged" 2014-09-09 16:20:12 +02:00
battery.h ACPI / battery: move some ACPI_BATTERY_* definitions to header 2014-03-19 01:57:46 +01:00
bgrt.c
blacklist.c ACPI: move models with win8 brightness problems from win8 blacklist to use_native_backlight 2014-07-21 13:43:56 +02:00
bus.c ACPIPHP / radeon / nouveau: Remove acpi_bus_no_hotplug() 2014-09-15 13:15:34 -06:00
button.c ACPI / button: Do not propagate wakeup-from-suspend events 2014-07-23 00:59:04 +02:00
cm_sbs.c ACPI: Revert "ACPI: Remove CONFIG_ACPI_PROCFS_POWER and cm_sbsc.c" 2014-05-06 01:52:09 +02:00
container.c ACPI / scan: always register container scan handler 2014-05-30 16:04:36 +02:00
custom_method.c
debugfs.c
device_pm.c ACPI / PM: Use ACPI_COMPANION() instead of ACPI_HANDLE() 2014-07-23 01:01:41 +02:00
dock.c ACPI / dock: Drop dock_device_ids[] table 2014-04-07 14:11:35 +02:00
ec_sys.c
ec.c ACPI / EC: Add msi quirk for Clevo W350etq 2014-09-02 01:57:56 +02:00
event.c
fan.c ACPI / fan: do nothing in suspend and poweroff callback 2014-02-20 21:42:09 +01:00
glue.c ACPI / scan: Add bind/unbind callbacks to struct acpi_scan_handler 2014-02-11 00:35:46 +01:00
hed.c
internal.h Merge branches 'acpi-pnp' and 'acpi-pci' 2014-07-27 23:55:35 +02:00
Kconfig ACPI and power management updates for 3.17-rc1 2014-08-06 20:34:19 -07:00
Makefile ACPI / processor: Introduce ARCH_MIGHT_HAVE_ACPI_PDC 2014-07-21 13:50:58 +02:00
numa.c
nvs.c ACPI: Clean up acpi_os_map/unmap_memory() to eliminate __iomem. 2014-05-27 18:13:08 +02:00
osl.c ACPI: Support _OSI("Darwin") correctly 2014-09-24 23:31:12 +02:00
pci_irq.c x86, irq, PCI: Keep IRQ assignment for runtime power management 2014-08-29 13:38:00 +02:00
pci_link.c ACPI: Remove duplicate definitions of PREFIX 2014-03-19 02:01:57 +01:00
pci_root.c ACPI: Support _OSI("Darwin") correctly 2014-09-24 23:31:12 +02:00
pci_slot.c
power.c ACPI: Remove duplicate definitions of PREFIX 2014-03-19 02:01:57 +01:00
proc.c
processor_core.c Merge branches 'acpi-video', 'acpi-battery', 'acpi-processor' and 'acpi-lpss' 2014-08-05 22:50:54 +02:00
processor_driver.c ACPI / processor: Make acpi_cpu_soft_notify() process CPU FROZEN events 2014-08-06 22:22:03 +02:00
processor_idle.c ACPI / cpuidle: fix deadlock between cpuidle_lock and cpu_hotplug.lock 2014-09-03 23:05:55 +02:00
processor_pdc.c ACPI / processor: Introduce ARCH_MIGHT_HAVE_ACPI_PDC 2014-07-21 13:50:58 +02:00
processor_perflib.c ACPI / processor: use acpi_evaluate_ost() to replace open-coded version 2014-02-21 00:27:47 +01:00
processor_thermal.c
processor_throttling.c ACPI / processor: Rework processor throttling with work_on_cpu() 2014-02-27 00:21:05 +01:00
reboot.c
resource.c ACPI / resources: only reject zero length resources based at address zero 2014-07-07 22:11:09 +02:00
sbs.c ACPI / SBS: Disable smart battery manager on Apple 2014-09-24 23:31:11 +02:00
sbshc.c
sbshc.h
scan.c ACPI / scan: not cache _SUN value in struct acpi_device_pnp 2014-09-03 22:41:14 +02:00
sleep.c ACPI / sleep: Do not save NVS for new machines to accelerate S3 2014-07-24 01:03:18 +02:00
sleep.h
sysfs.c ACPI: Remove duplicate definitions of PREFIX 2014-03-19 02:01:57 +01:00
tables.c ACPI: use kstrto*() instead of simple_strto*() 2014-06-17 14:01:56 +02:00
thermal.c Merge back earlier ACPI thermal material. 2014-05-29 13:28:14 +02:00
utils.c ACPI: add dynamic_debug support 2014-05-26 14:38:57 +02:00
video_detect.c ACPI / video: Add Dell Inspiron 5737 to the blacklist 2014-07-07 23:38:10 +02:00
video.c ACPI / video: Disable native_backlight on HP ENVY 15 Notebook PC 2014-09-02 01:55:23 +02:00
wakeup.c