2005-04-17 02:20:36 +04:00
#
# Makefile for the Linux ACPI interpreter
2007-03-07 22:28:00 +03:00
#
2005-04-17 02:20:36 +04:00
2009-01-09 08:13:17 +03:00
ccflags-y := -Os
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
2005-04-17 02:20:36 +04:00
#
# ACPI Boot-Time Table Parsing
#
2005-08-24 20:07:20 +04:00
obj-y += tables.o
2005-09-22 09:15:57 +04:00
obj-$(CONFIG_X86) += blacklist.o
2005-04-17 02:20:36 +04:00
#
# ACPI Core Subsystem (Interpreter)
#
2009-03-12 01:37:19 +03:00
obj-y += acpi.o \
2009-01-09 08:13:17 +03:00
acpica/
2009-03-12 01:37:19 +03:00
# All the builtin files are in the "acpi." module_param namespace.
acpi-y += osl.o utils.o reboot.o
2011-12-08 07:25:49 +04:00
acpi-y += nvs.o
2009-03-12 01:37:19 +03:00
2012-11-02 04:40:09 +04:00
# Power management related files
2009-03-12 01:37:19 +03:00
acpi-y += wakeup.o
acpi-y += sleep.o
2013-05-17 00:29:28 +04:00
acpi-y += device_pm.o
2011-12-08 07:25:49 +04:00
acpi-$(CONFIG_ACPI_SLEEP) += proc.o
2009-01-09 08:13:17 +03:00
2005-04-17 02:20:36 +04:00
#
# ACPI Bus and Device Drivers
#
2009-03-12 01:37:19 +03:00
acpi-y += bus.o glue.o
acpi-y += scan.o
2012-11-15 03:30:01 +04:00
acpi-y += resource.o
ACPI / processor: Use common hotplug infrastructure
Split the ACPI processor driver into two parts, one that is
non-modular, resides in the ACPI core and handles the enumeration
and hotplug of processors and one that implements the rest of the
existing processor driver functionality.
The non-modular part uses an ACPI scan handler object to enumerate
processors on the basis of information provided by the ACPI namespace
and to hook up with the common ACPI hotplug infrastructure. It also
populates the ACPI handle of each processor device having a
corresponding object in the ACPI namespace, which allows the driver
proper to bind to those devices, and makes the driver bind to them
if it is readily available (i.e. loaded) when the scan handler's
.attach() routine is running.
There are a few reasons to make this change.
First, switching the ACPI processor driver to using the common ACPI
hotplug infrastructure reduces code duplication and size considerably,
even though a new file is created along with a header comment etc.
Second, since the common hotplug code attempts to offline devices
before starting the (non-reversible) removal procedure, it will abort
(and possibly roll back) hot-remove operations involving processors
if cpu_down() returns an error code for one of them instead of
continuing them blindly (if /sys/firmware/acpi/hotplug/force_remove
is unset). That is a more desirable behavior than what the current
code does.
Finally, the separation of the scan/hotplug part from the driver
proper makes it possible to simplify the driver's .remove() routine,
because it doesn't need to worry about the possible cleanup related
to processor removal any more (the scan/hotplug part is responsible
for that now) and can handle device removal and driver removal
symmetricaly (i.e. as appropriate).
Some user-visible changes in sysfs are made (for example, the
'sysdev' link from the ACPI device node to the processor device's
directory is gone and a 'physical_node' link is present instead
and a corresponding 'firmware_node' is present in the processor
device's directory, the processor driver is now visible under
/sys/bus/cpu/drivers/ and bound to the processor device), but
that shouldn't affect the functionality that users care about
(frequency scaling, C-states and thermal management).
Tested on my venerable Toshiba Portege R500.
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Toshi Kani <toshi.kani@hp.com>
2013-05-03 02:26:22 +04:00
acpi-y += acpi_processor.o
2010-02-22 22:11:14 +03:00
acpi-y += processor_core.o
2009-03-12 01:37:19 +03:00
acpi-y += ec.o
acpi-$(CONFIG_ACPI_DOCK) += dock.o
2012-12-23 03:02:54 +04:00
acpi-y += pci_root.o pci_link.o pci_irq.o
2013-03-07 02:46:20 +04:00
acpi-$(CONFIG_X86_INTEL_LPSS) += acpi_lpss.o
2012-11-01 01:45:02 +04:00
acpi-y += acpi_platform.o
2009-03-12 01:37:19 +03:00
acpi-y += power.o
2010-07-15 06:46:33 +04:00
acpi-y += event.o
2010-07-15 06:46:30 +04:00
acpi-y += sysfs.o
2013-06-05 06:27:50 +04:00
acpi-$(CONFIG_X86) += acpi_cmos_rtc.o
2010-07-15 06:46:15 +04:00
acpi-$(CONFIG_DEBUG_FS) += debugfs.o
2009-03-12 01:37:19 +03:00
acpi-$(CONFIG_ACPI_NUMA) += numa.o
i f d e f C O N F I G _ A C P I _ V I D E O
acpi-y += video_detect.o
2005-04-17 02:20:36 +04:00
e n d i f
2009-03-12 01:37:19 +03:00
# These are (potentially) separate modules
2012-10-17 00:53:37 +04:00
# IPMI may be used by other drivers, so it has to initialise before them
obj-$(CONFIG_ACPI_IPMI) += acpi_ipmi.o
2005-04-17 02:20:36 +04:00
obj-$(CONFIG_ACPI_AC) += ac.o
obj-$(CONFIG_ACPI_BUTTON) += button.o
obj-$(CONFIG_ACPI_FAN) += fan.o
2006-10-21 01:30:25 +04:00
obj-$(CONFIG_ACPI_VIDEO) += video.o
2008-06-11 01:30:42 +04:00
obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o
2005-04-17 02:20:36 +04:00
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
obj-$(CONFIG_ACPI_CONTAINER) += container.o
obj-$(CONFIG_ACPI_THERMAL) += thermal.o
2009-03-12 01:37:19 +03:00
obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o
2009-01-10 22:19:05 +03:00
obj-$(CONFIG_ACPI_BATTERY) += battery.o
2007-09-26 19:43:28 +04:00
obj-$(CONFIG_ACPI_SBS) += sbshc.o
2008-02-09 11:22:13 +03:00
obj-$(CONFIG_ACPI_SBS) += sbs.o
2010-05-18 10:35:17 +04:00
obj-$(CONFIG_ACPI_HED) += hed.o
2010-07-16 15:11:31 +04:00
obj-$(CONFIG_ACPI_EC_DEBUGFS) += ec_sys.o
2011-05-26 14:26:24 +04:00
obj-$(CONFIG_ACPI_CUSTOM_METHOD) += custom_method.o
2012-01-31 22:19:20 +04:00
obj-$(CONFIG_ACPI_BGRT) += bgrt.o
2009-03-12 01:37:19 +03:00
2009-04-03 06:49:43 +04:00
# processor has its own "processor." module_param namespace
2010-02-22 22:11:08 +03:00
processor-y := processor_driver.o processor_throttling.o
2009-04-03 06:49:43 +04:00
processor-y += processor_idle.o processor_thermal.o
processor-$(CONFIG_CPU_FREQ) += processor_perflib.o
ACPI: create Processor Aggregator Device driver
ACPI 4.0 created the logical "processor aggregator device" as
a mechinism for platforms to ask the OS to force otherwise busy
processors to enter (power saving) idle.
The intent is to lower power consumption to ride-out
transient electrical and thermal emergencies,
rather than powering off the server.
On platforms that can save more power/performance via P-states,
the platform will first exhaust P-states before forcing idle.
However, the relative benefit of P-states vs. idle states
is platform dependent, and thus this driver need not know
or care about it.
This driver does not use the kernel's CPU hot-plug mechanism
because after the transient emergency is over, the system must
be returned to its normal state, and hotplug would permanently
break both cpusets and binding.
So to force idle, the driver creates a power saving thread.
The scheduler will migrate the thread to the preferred CPU.
The thread has max priority and has SCHED_RR policy,
so it can occupy one CPU. To save power, the thread will
invoke the deep C-state entry instructions.
To avoid starvation, the thread will sleep 5% of the time
time for every second (current RT scheduler has threshold
to avoid starvation, but if other CPUs are idle,
the CPU can borrow CPU timer from other,
which makes the mechanism not work here)
Vaidyanathan Srinivasan has proposed scheduler enhancements
to allow injecting idle time into the system. This driver doesn't
depend on those enhancements, but could cut over to them
when they are available.
Peter Z. does not favor upstreaming this driver until
the those scheduler enhancements are in place. However,
we favor upstreaming this driver now because it is useful
now, and can be enhanced over time.
Signed-off-by: Shaohua Li <shaohua.li@intel.com>
NACKed-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Signed-off-by: Len Brown <len.brown@intel.com>
2009-07-28 02:11:02 +04:00
obj-$(CONFIG_ACPI_PROCESSOR_AGGREGATOR) += acpi_pad.o
2010-05-18 10:35:12 +04:00
obj-$(CONFIG_ACPI_APEI) += apei/
2013-10-22 01:29:25 +04:00
obj-$(CONFIG_ACPI_EXTLOG) += acpi_extlog.o