Merge 6f3952cbe0 ("Merge tag 'for-5.12-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux") into android-mainline
Steps on the way to 5.12-rc1. Resolves merge conflicts in: drivers/base/power/main.c Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Iad58c40d8ec08d50284751ed3530186f373546d1
This commit is contained in:
24
Documentation/ABI/testing/sysfs-platform_profile
Normal file
24
Documentation/ABI/testing/sysfs-platform_profile
Normal file
@@ -0,0 +1,24 @@
|
||||
What: /sys/firmware/acpi/platform_profile_choices
|
||||
Date: October 2020
|
||||
Contact: Hans de Goede <hdegoede@redhat.com>
|
||||
Description: This file contains a space-separated list of profiles supported for this device.
|
||||
|
||||
Drivers must use the following standard profile-names:
|
||||
|
||||
============ ============================================
|
||||
low-power Low power consumption
|
||||
cool Cooler operation
|
||||
quiet Quieter operation
|
||||
balanced Balance between low power consumption and performance
|
||||
performance High performance operation
|
||||
============ ============================================
|
||||
|
||||
Userspace may expect drivers to offer more than one of these
|
||||
standard profile names.
|
||||
|
||||
What: /sys/firmware/acpi/platform_profile
|
||||
Date: October 2020
|
||||
Contact: Hans de Goede <hdegoede@redhat.com>
|
||||
Description: Reading this file gives the current selected profile for this
|
||||
device. Writing this file with one of the strings from
|
||||
platform_profile_choices changes the profile to the new value.
|
||||
@@ -52,19 +52,12 @@ shows the supported mask values, currently these::
|
||||
ACPI_CA_DISASSEMBLER 0x00000800
|
||||
ACPI_COMPILER 0x00001000
|
||||
ACPI_TOOLS 0x00002000
|
||||
ACPI_BUS_COMPONENT 0x00010000
|
||||
ACPI_AC_COMPONENT 0x00020000
|
||||
ACPI_BATTERY_COMPONENT 0x00040000
|
||||
ACPI_BUTTON_COMPONENT 0x00080000
|
||||
ACPI_SBS_COMPONENT 0x00100000
|
||||
ACPI_FAN_COMPONENT 0x00200000
|
||||
ACPI_PCI_COMPONENT 0x00400000
|
||||
ACPI_POWER_COMPONENT 0x00800000
|
||||
ACPI_CONTAINER_COMPONENT 0x01000000
|
||||
ACPI_SYSTEM_COMPONENT 0x02000000
|
||||
ACPI_THERMAL_COMPONENT 0x04000000
|
||||
ACPI_MEMORY_DEVICE_COMPONENT 0x08000000
|
||||
ACPI_VIDEO_COMPONENT 0x10000000
|
||||
ACPI_PROCESSOR_COMPONENT 0x20000000
|
||||
|
||||
debug_level
|
||||
@@ -118,15 +111,15 @@ currently these::
|
||||
Examples
|
||||
========
|
||||
|
||||
For example, drivers/acpi/bus.c contains this::
|
||||
For example, drivers/acpi/acpica/evxfevnt.c contains this::
|
||||
|
||||
#define _COMPONENT ACPI_BUS_COMPONENT
|
||||
#define _COMPONENT ACPI_EVENTS
|
||||
...
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device insertion detected\n"));
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INIT, "ACPI mode disabled\n"));
|
||||
|
||||
To turn on this message, set the ACPI_BUS_COMPONENT bit in acpi.debug_layer
|
||||
and the ACPI_LV_INFO bit in acpi.debug_level. (The ACPI_DEBUG_PRINT
|
||||
statement uses ACPI_DB_INFO, which is macro based on the ACPI_LV_INFO
|
||||
To turn on this message, set the ACPI_EVENTS bit in acpi.debug_layer
|
||||
and the ACPI_LV_INIT bit in acpi.debug_level. (The ACPI_DEBUG_PRINT
|
||||
statement uses ACPI_DB_INIT, which is a macro based on the ACPI_LV_INIT
|
||||
definition.)
|
||||
|
||||
Enable all AML "Debug" output (stores to the Debug object while interpreting
|
||||
|
||||
@@ -146,6 +146,7 @@ following rules (see also the examples):
|
||||
other words, it is not mandatory to fill all the GPIO lines
|
||||
- empty names are allowed (two quotation marks ``""`` correspond to an empty
|
||||
name)
|
||||
- names inside one GPIO controller/expander must be unique
|
||||
|
||||
Example of a GPIO controller of 16 lines, with an incomplete list with two
|
||||
empty names::
|
||||
|
||||
@@ -30,6 +30,7 @@ Power Management
|
||||
userland-swsusp
|
||||
|
||||
powercap/powercap
|
||||
powercap/dtpm
|
||||
|
||||
regulator/consumer
|
||||
regulator/design
|
||||
|
||||
212
Documentation/power/powercap/dtpm.rst
Normal file
212
Documentation/power/powercap/dtpm.rst
Normal file
@@ -0,0 +1,212 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
==========================================
|
||||
Dynamic Thermal Power Management framework
|
||||
==========================================
|
||||
|
||||
On the embedded world, the complexity of the SoC leads to an
|
||||
increasing number of hotspots which need to be monitored and mitigated
|
||||
as a whole in order to prevent the temperature to go above the
|
||||
normative and legally stated 'skin temperature'.
|
||||
|
||||
Another aspect is to sustain the performance for a given power budget,
|
||||
for example virtual reality where the user can feel dizziness if the
|
||||
performance is capped while a big CPU is processing something else. Or
|
||||
reduce the battery charging because the dissipated power is too high
|
||||
compared with the power consumed by other devices.
|
||||
|
||||
The user space is the most adequate place to dynamically act on the
|
||||
different devices by limiting their power given an application
|
||||
profile: it has the knowledge of the platform.
|
||||
|
||||
The Dynamic Thermal Power Management (DTPM) is a technique acting on
|
||||
the device power by limiting and/or balancing a power budget among
|
||||
different devices.
|
||||
|
||||
The DTPM framework provides an unified interface to act on the
|
||||
device power.
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
The DTPM framework relies on the powercap framework to create the
|
||||
powercap entries in the sysfs directory and implement the backend
|
||||
driver to do the connection with the power manageable device.
|
||||
|
||||
The DTPM is a tree representation describing the power constraints
|
||||
shared between devices, not their physical positions.
|
||||
|
||||
The nodes of the tree are a virtual description aggregating the power
|
||||
characteristics of the children nodes and their power limitations.
|
||||
|
||||
The leaves of the tree are the real power manageable devices.
|
||||
|
||||
For instance::
|
||||
|
||||
SoC
|
||||
|
|
||||
`-- pkg
|
||||
|
|
||||
|-- pd0 (cpu0-3)
|
||||
|
|
||||
`-- pd1 (cpu4-5)
|
||||
|
||||
The pkg power will be the sum of pd0 and pd1 power numbers::
|
||||
|
||||
SoC (400mW - 3100mW)
|
||||
|
|
||||
`-- pkg (400mW - 3100mW)
|
||||
|
|
||||
|-- pd0 (100mW - 700mW)
|
||||
|
|
||||
`-- pd1 (300mW - 2400mW)
|
||||
|
||||
When the nodes are inserted in the tree, their power characteristics are propagated to the parents::
|
||||
|
||||
SoC (600mW - 5900mW)
|
||||
|
|
||||
|-- pkg (400mW - 3100mW)
|
||||
| |
|
||||
| |-- pd0 (100mW - 700mW)
|
||||
| |
|
||||
| `-- pd1 (300mW - 2400mW)
|
||||
|
|
||||
`-- pd2 (200mW - 2800mW)
|
||||
|
||||
Each node have a weight on a 2^10 basis reflecting the percentage of power consumption along the siblings::
|
||||
|
||||
SoC (w=1024)
|
||||
|
|
||||
|-- pkg (w=538)
|
||||
| |
|
||||
| |-- pd0 (w=231)
|
||||
| |
|
||||
| `-- pd1 (w=794)
|
||||
|
|
||||
`-- pd2 (w=486)
|
||||
|
||||
Note the sum of weights at the same level are equal to 1024.
|
||||
|
||||
When a power limitation is applied to a node, then it is distributed along the children given their weights. For example, if we set a power limitation of 3200mW at the 'SoC' root node, the resulting tree will be::
|
||||
|
||||
SoC (w=1024) <--- power_limit = 3200mW
|
||||
|
|
||||
|-- pkg (w=538) --> power_limit = 1681mW
|
||||
| |
|
||||
| |-- pd0 (w=231) --> power_limit = 378mW
|
||||
| |
|
||||
| `-- pd1 (w=794) --> power_limit = 1303mW
|
||||
|
|
||||
`-- pd2 (w=486) --> power_limit = 1519mW
|
||||
|
||||
|
||||
Flat description
|
||||
----------------
|
||||
|
||||
A root node is created and it is the parent of all the nodes. This
|
||||
description is the simplest one and it is supposed to give to user
|
||||
space a flat representation of all the devices supporting the power
|
||||
limitation without any power limitation distribution.
|
||||
|
||||
Hierarchical description
|
||||
------------------------
|
||||
|
||||
The different devices supporting the power limitation are represented
|
||||
hierarchically. There is one root node, all intermediate nodes are
|
||||
grouping the child nodes which can be intermediate nodes also or real
|
||||
devices.
|
||||
|
||||
The intermediate nodes aggregate the power information and allows to
|
||||
set the power limit given the weight of the nodes.
|
||||
|
||||
User space API
|
||||
==============
|
||||
|
||||
As stated in the overview, the DTPM framework is built on top of the
|
||||
powercap framework. Thus the sysfs interface is the same, please refer
|
||||
to the powercap documentation for further details.
|
||||
|
||||
* power_uw: Instantaneous power consumption. If the node is an
|
||||
intermediate node, then the power consumption will be the sum of all
|
||||
children power consumption.
|
||||
|
||||
* max_power_range_uw: The power range resulting of the maximum power
|
||||
minus the minimum power.
|
||||
|
||||
* name: The name of the node. This is implementation dependent. Even
|
||||
if it is not recommended for the user space, several nodes can have
|
||||
the same name.
|
||||
|
||||
* constraint_X_name: The name of the constraint.
|
||||
|
||||
* constraint_X_max_power_uw: The maximum power limit to be applicable
|
||||
to the node.
|
||||
|
||||
* constraint_X_power_limit_uw: The power limit to be applied to the
|
||||
node. If the value contained in constraint_X_max_power_uw is set,
|
||||
the constraint will be removed.
|
||||
|
||||
* constraint_X_time_window_us: The meaning of this file will depend
|
||||
on the constraint number.
|
||||
|
||||
Constraints
|
||||
-----------
|
||||
|
||||
* Constraint 0: The power limitation is immediately applied, without
|
||||
limitation in time.
|
||||
|
||||
Kernel API
|
||||
==========
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
The DTPM framework has no power limiting backend support. It is
|
||||
generic and provides a set of API to let the different drivers to
|
||||
implement the backend part for the power limitation and create the
|
||||
power constraints tree.
|
||||
|
||||
It is up to the platform to provide the initialization function to
|
||||
allocate and link the different nodes of the tree.
|
||||
|
||||
A special macro has the role of declaring a node and the corresponding
|
||||
initialization function via a description structure. This one contains
|
||||
an optional parent field allowing to hook different devices to an
|
||||
already existing tree at boot time.
|
||||
|
||||
For instance::
|
||||
|
||||
struct dtpm_descr my_descr = {
|
||||
.name = "my_name",
|
||||
.init = my_init_func,
|
||||
};
|
||||
|
||||
DTPM_DECLARE(my_descr);
|
||||
|
||||
The nodes of the DTPM tree are described with dtpm structure. The
|
||||
steps to add a new power limitable device is done in three steps:
|
||||
|
||||
* Allocate the dtpm node
|
||||
* Set the power number of the dtpm node
|
||||
* Register the dtpm node
|
||||
|
||||
The registration of the dtpm node is done with the powercap
|
||||
ops. Basically, it must implements the callbacks to get and set the
|
||||
power and the limit.
|
||||
|
||||
Alternatively, if the node to be inserted is an intermediate one, then
|
||||
a simple function to insert it as a future parent is available.
|
||||
|
||||
If a device has its power characteristics changing, then the tree must
|
||||
be updated with the new power numbers and weights.
|
||||
|
||||
Nomenclature
|
||||
------------
|
||||
|
||||
* dtpm_alloc() : Allocate and initialize a dtpm structure
|
||||
|
||||
* dtpm_register() : Add the dtpm node to the tree
|
||||
|
||||
* dtpm_unregister() : Remove the dtpm node from the tree
|
||||
|
||||
* dtpm_update_power() : Update the power characteristics of the dtpm node
|
||||
@@ -579,7 +579,7 @@ should be used. Of course, for this purpose the device's runtime PM has to be
|
||||
enabled earlier by calling pm_runtime_enable().
|
||||
|
||||
Note, if the device may execute pm_runtime calls during the probe (such as
|
||||
if it is registers with a subsystem that may call back in) then the
|
||||
if it is registered with a subsystem that may call back in) then the
|
||||
pm_runtime_get_sync() call paired with a pm_runtime_put() call will be
|
||||
appropriate to ensure that the device is not put back to sleep during the
|
||||
probe. This can happen with systems such as the network device layer.
|
||||
@@ -587,11 +587,11 @@ probe. This can happen with systems such as the network device layer.
|
||||
It may be desirable to suspend the device once ->probe() has finished.
|
||||
Therefore the driver core uses the asynchronous pm_request_idle() to submit a
|
||||
request to execute the subsystem-level idle callback for the device at that
|
||||
time. A driver that makes use of the runtime autosuspend feature, may want to
|
||||
time. A driver that makes use of the runtime autosuspend feature may want to
|
||||
update the last busy mark before returning from ->probe().
|
||||
|
||||
Moreover, the driver core prevents runtime PM callbacks from racing with the bus
|
||||
notifier callback in __device_release_driver(), which is necessary, because the
|
||||
notifier callback in __device_release_driver(), which is necessary because the
|
||||
notifier is used by some subsystems to carry out operations affecting the
|
||||
runtime PM functionality. It does so by calling pm_runtime_get_sync() before
|
||||
driver_sysfs_remove() and the BUS_NOTIFY_UNBIND_DRIVER notifications. This
|
||||
@@ -603,7 +603,7 @@ calling pm_runtime_suspend() from their ->remove() routines, the driver core
|
||||
executes pm_runtime_put_sync() after running the BUS_NOTIFY_UNBIND_DRIVER
|
||||
notifications in __device_release_driver(). This requires bus types and
|
||||
drivers to make their ->remove() callbacks avoid races with runtime PM directly,
|
||||
but also it allows of more flexibility in the handling of devices during the
|
||||
but it also allows more flexibility in the handling of devices during the
|
||||
removal of their drivers.
|
||||
|
||||
Drivers in ->remove() callback should undo the runtime PM changes done
|
||||
@@ -693,7 +693,7 @@ that the device appears to be runtime-suspended and its state is fine, so it
|
||||
may be left in runtime suspend provided that all of its descendants are also
|
||||
left in runtime suspend. If that happens, the PM core will not execute any
|
||||
system suspend and resume callbacks for all of those devices, except for the
|
||||
complete callback, which is then entirely responsible for handling the device
|
||||
.complete() callback, which is then entirely responsible for handling the device
|
||||
as appropriate. This only applies to system suspend transitions that are not
|
||||
related to hibernation (see Documentation/driver-api/pm/devices.rst for more
|
||||
information).
|
||||
@@ -706,7 +706,7 @@ out the following operations:
|
||||
right before executing the subsystem-level .prepare() callback for it and
|
||||
pm_runtime_barrier() is called for every device right before executing the
|
||||
subsystem-level .suspend() callback for it. In addition to that the PM core
|
||||
calls __pm_runtime_disable() with 'false' as the second argument for every
|
||||
calls __pm_runtime_disable() with 'false' as the second argument for every
|
||||
device right before executing the subsystem-level .suspend_late() callback
|
||||
for it.
|
||||
|
||||
@@ -783,7 +783,7 @@ driver/base/power/generic_ops.c:
|
||||
`int pm_generic_restore_noirq(struct device *dev);`
|
||||
- invoke the ->restore_noirq() callback provided by the device's driver
|
||||
|
||||
These functions are the defaults used by the PM core, if a subsystem doesn't
|
||||
These functions are the defaults used by the PM core if a subsystem doesn't
|
||||
provide its own callbacks for ->runtime_idle(), ->runtime_suspend(),
|
||||
->runtime_resume(), ->suspend(), ->suspend_noirq(), ->resume(),
|
||||
->resume_noirq(), ->freeze(), ->freeze_noirq(), ->thaw(), ->thaw_noirq(),
|
||||
|
||||
@@ -24,6 +24,7 @@ place where this information is gathered.
|
||||
ioctl/index
|
||||
iommu
|
||||
media/index
|
||||
sysfs-platform_profile
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
|
||||
42
Documentation/userspace-api/sysfs-platform_profile.rst
Normal file
42
Documentation/userspace-api/sysfs-platform_profile.rst
Normal file
@@ -0,0 +1,42 @@
|
||||
=====================================================================
|
||||
Platform Profile Selection (e.g. /sys/firmware/acpi/platform_profile)
|
||||
=====================================================================
|
||||
|
||||
On modern systems the platform performance, temperature, fan and other
|
||||
hardware related characteristics are often dynamically configurable. The
|
||||
platform configuration is often automatically adjusted to the current
|
||||
conditions by some automatic mechanism (which may very well live outside
|
||||
the kernel).
|
||||
|
||||
These auto platform adjustment mechanisms often can be configured with
|
||||
one of several platform profiles, with either a bias towards low power
|
||||
operation or towards performance.
|
||||
|
||||
The purpose of the platform_profile attribute is to offer a generic sysfs
|
||||
API for selecting the platform profile of these automatic mechanisms.
|
||||
|
||||
Note that this API is only for selecting the platform profile, it is
|
||||
NOT a goal of this API to allow monitoring the resulting performance
|
||||
characteristics. Monitoring performance is best done with device/vendor
|
||||
specific tools such as e.g. turbostat.
|
||||
|
||||
Specifically when selecting a high performance profile the actual achieved
|
||||
performance may be limited by various factors such as: the heat generated
|
||||
by other components, room temperature, free air flow at the bottom of a
|
||||
laptop, etc. It is explicitly NOT a goal of this API to let userspace know
|
||||
about any sub-optimal conditions which are impeding reaching the requested
|
||||
performance level.
|
||||
|
||||
Since numbers on their own cannot represent the multiple variables that a
|
||||
profile will adjust (power consumption, heat generation, etc) this API
|
||||
uses strings to describe the various profiles. To make sure that userspace
|
||||
gets a consistent experience the sysfs-platform_profile ABI document defines
|
||||
a fixed set of profile names. Drivers *must* map their internal profile
|
||||
representation onto this fixed set.
|
||||
|
||||
If there is no good match when mapping then a new profile name may be
|
||||
added. Drivers which wish to introduce new profile names must:
|
||||
|
||||
1. Explain why the existing profile names canot be used.
|
||||
2. Add the new profile name, along with a clear description of the
|
||||
expected behaviour, to the sysfs-platform_profile ABI documentation.
|
||||
@@ -4600,6 +4600,7 @@ L: linux-samsung-soc@vger.kernel.org
|
||||
S: Supported
|
||||
F: arch/arm/mach-exynos/pm.c
|
||||
F: drivers/cpuidle/cpuidle-exynos.c
|
||||
F: include/linux/platform_data/cpuidle-exynos.h
|
||||
|
||||
CPUIDLE DRIVER - ARM PSCI
|
||||
M: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||||
|
||||
@@ -1111,6 +1111,9 @@ config ARCH_SPLIT_ARG64
|
||||
If a 32-bit architecture requires 64-bit arguments to be split into
|
||||
pairs of 32-bit arguments, select this option.
|
||||
|
||||
config ARCH_HAS_ELFCORE_COMPAT
|
||||
bool
|
||||
|
||||
source "kernel/gcov/Kconfig"
|
||||
|
||||
source "scripts/gcc-plugins/Kconfig"
|
||||
|
||||
@@ -1213,7 +1213,6 @@ config ARM64_TAGGED_ADDR_ABI
|
||||
menuconfig COMPAT
|
||||
bool "Kernel support for 32-bit EL0"
|
||||
depends on ARM64_4K_PAGES || EXPERT
|
||||
select COMPAT_BINFMT_ELF if BINFMT_ELF
|
||||
select HAVE_UID16
|
||||
select OLD_SIGSUSPEND3
|
||||
select COMPAT_OLD_SIGACTION
|
||||
|
||||
@@ -43,7 +43,7 @@ crash_save_this_cpu(void)
|
||||
|
||||
elf_greg_t *dst = (elf_greg_t *)&(prstatus->pr_reg);
|
||||
memset(prstatus, 0, sizeof(*prstatus));
|
||||
prstatus->pr_pid = current->pid;
|
||||
prstatus->common.pr_pid = current->pid;
|
||||
|
||||
ia64_dump_cpu_regs(dst);
|
||||
cfm = dst[43];
|
||||
|
||||
@@ -92,6 +92,7 @@ config MIPS
|
||||
select SET_FS
|
||||
select SYSCTL_EXCEPTION_TRACE
|
||||
select VIRT_TO_BUS
|
||||
select ARCH_HAS_ELFCORE_COMPAT
|
||||
|
||||
config MIPS_FIXUP_BIGPHYS_ADDR
|
||||
bool
|
||||
@@ -2182,7 +2183,7 @@ endchoice
|
||||
config KVM_GUEST
|
||||
bool "KVM Guest Kernel"
|
||||
depends on CPU_MIPS32_R2
|
||||
depends on BROKEN_ON_SMP
|
||||
depends on !64BIT && BROKEN_ON_SMP
|
||||
help
|
||||
Select this option if building a guest kernel for KVM (Trap & Emulate)
|
||||
mode.
|
||||
@@ -3300,11 +3301,6 @@ config MIPS32_N32
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config BINFMT_ELF32
|
||||
bool
|
||||
default y if MIPS32_O32 || MIPS32_N32
|
||||
select ELFCORE
|
||||
|
||||
menu "Power management options"
|
||||
|
||||
config ARCH_HIBERNATION_POSSIBLE
|
||||
|
||||
@@ -201,7 +201,6 @@ struct mips_elf_abiflags_v0 {
|
||||
uint32_t flags2;
|
||||
};
|
||||
|
||||
#ifndef ELF_ARCH
|
||||
/* ELF register definitions */
|
||||
#define ELF_NGREG 45
|
||||
#define ELF_NFPREG 33
|
||||
@@ -219,7 +218,7 @@ void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch elfo32_check_arch
|
||||
#define elf_check_arch elf32_check_arch
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
@@ -235,7 +234,8 @@ void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch elfn64_check_arch
|
||||
#define elf_check_arch elf64_check_arch
|
||||
#define compat_elf_check_arch elf32_check_arch
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
@@ -257,8 +257,6 @@ void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
||||
#endif
|
||||
#define ELF_ARCH EM_MIPS
|
||||
|
||||
#endif /* !defined(ELF_ARCH) */
|
||||
|
||||
/*
|
||||
* In order to be sure that we don't attempt to execute an O32 binary which
|
||||
* requires 64 bit FP (FR=1) on a system which does not support it we refuse
|
||||
@@ -277,9 +275,9 @@ void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
||||
#define vmcore_elf64_check_arch mips_elf_check_machine
|
||||
|
||||
/*
|
||||
* Return non-zero if HDR identifies an o32 ELF binary.
|
||||
* Return non-zero if HDR identifies an o32 or n32 ELF binary.
|
||||
*/
|
||||
#define elfo32_check_arch(hdr) \
|
||||
#define elf32_check_arch(hdr) \
|
||||
({ \
|
||||
int __res = 1; \
|
||||
struct elfhdr *__h = (hdr); \
|
||||
@@ -288,21 +286,26 @@ void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
||||
__res = 0; \
|
||||
if (__h->e_ident[EI_CLASS] != ELFCLASS32) \
|
||||
__res = 0; \
|
||||
if ((__h->e_flags & EF_MIPS_ABI2) != 0) \
|
||||
__res = 0; \
|
||||
if (((__h->e_flags & EF_MIPS_ABI) != 0) && \
|
||||
((__h->e_flags & EF_MIPS_ABI) != EF_MIPS_ABI_O32)) \
|
||||
__res = 0; \
|
||||
if (__h->e_flags & __MIPS_O32_FP64_MUST_BE_ZERO) \
|
||||
__res = 0; \
|
||||
\
|
||||
if ((__h->e_flags & EF_MIPS_ABI2) != 0) { \
|
||||
if (!IS_ENABLED(CONFIG_MIPS32_N32) || \
|
||||
(__h->e_flags & EF_MIPS_ABI)) \
|
||||
__res = 0; \
|
||||
} else { \
|
||||
if (IS_ENABLED(CONFIG_64BIT) && !IS_ENABLED(CONFIG_MIPS32_O32)) \
|
||||
__res = 0; \
|
||||
if (((__h->e_flags & EF_MIPS_ABI) != 0) && \
|
||||
((__h->e_flags & EF_MIPS_ABI) != EF_MIPS_ABI_O32)) \
|
||||
__res = 0; \
|
||||
if (__h->e_flags & __MIPS_O32_FP64_MUST_BE_ZERO) \
|
||||
__res = 0; \
|
||||
} \
|
||||
__res; \
|
||||
})
|
||||
|
||||
/*
|
||||
* Return non-zero if HDR identifies an n64 ELF binary.
|
||||
*/
|
||||
#define elfn64_check_arch(hdr) \
|
||||
#define elf64_check_arch(hdr) \
|
||||
({ \
|
||||
int __res = 1; \
|
||||
struct elfhdr *__h = (hdr); \
|
||||
@@ -315,25 +318,6 @@ void mips_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
||||
__res; \
|
||||
})
|
||||
|
||||
/*
|
||||
* Return non-zero if HDR identifies an n32 ELF binary.
|
||||
*/
|
||||
#define elfn32_check_arch(hdr) \
|
||||
({ \
|
||||
int __res = 1; \
|
||||
struct elfhdr *__h = (hdr); \
|
||||
\
|
||||
if (!mips_elf_check_machine(__h)) \
|
||||
__res = 0; \
|
||||
if (__h->e_ident[EI_CLASS] != ELFCLASS32) \
|
||||
__res = 0; \
|
||||
if (((__h->e_flags & EF_MIPS_ABI2) == 0) || \
|
||||
((__h->e_flags & EF_MIPS_ABI) != 0)) \
|
||||
__res = 0; \
|
||||
\
|
||||
__res; \
|
||||
})
|
||||
|
||||
struct mips_abi;
|
||||
|
||||
extern struct mips_abi mips_abi;
|
||||
@@ -469,9 +453,7 @@ extern const char *__elf_base_platform;
|
||||
the loader. We need to make sure that it is out of the way of the program
|
||||
that it will "exec", and that there is sufficient room for the brk. */
|
||||
|
||||
#ifndef ELF_ET_DYN_BASE
|
||||
#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
|
||||
#endif
|
||||
|
||||
/* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
|
||||
#define ARCH_DLINFO \
|
||||
|
||||
29
arch/mips/include/asm/elfcore-compat.h
Normal file
29
arch/mips/include/asm/elfcore-compat.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#ifndef _ASM_MIPS_ELFCORE_COMPAT_H
|
||||
#define _ASM_MIPS_ELFCORE_COMPAT_H
|
||||
|
||||
/*
|
||||
* On mips we have two 32bit ABIs - o32 and n32. The latter
|
||||
* has bigger registers, so we use it for compat_elf_regset_t.
|
||||
* The former uses o32_elf_prstatus and PRSTATUS_SIZE/SET_PR_FPVALID
|
||||
* are used to choose the size and location of ->pr_fpvalid of
|
||||
* the layout actually used.
|
||||
*/
|
||||
typedef elf_gregset_t compat_elf_gregset_t;
|
||||
|
||||
struct o32_elf_prstatus
|
||||
{
|
||||
struct compat_elf_prstatus_common common;
|
||||
unsigned int pr_reg[ELF_NGREG];
|
||||
compat_int_t pr_fpvalid;
|
||||
};
|
||||
|
||||
#define PRSTATUS_SIZE \
|
||||
(!test_thread_flag(TIF_32BIT_REGS) \
|
||||
? sizeof(struct compat_elf_prstatus) \
|
||||
: sizeof(struct o32_elf_prstatus))
|
||||
#define SET_PR_FPVALID(S) \
|
||||
(*(!test_thread_flag(TIF_32BIT_REGS) \
|
||||
? &(S)->pr_fpvalid \
|
||||
: &((struct o32_elf_prstatus *)(S))->pr_fpvalid) = 1)
|
||||
|
||||
#endif
|
||||
@@ -80,8 +80,8 @@ obj-$(CONFIG_KPROBES) += kprobes.o
|
||||
obj-$(CONFIG_32BIT) += scall32-o32.o
|
||||
obj-$(CONFIG_64BIT) += scall64-n64.o
|
||||
obj-$(CONFIG_MIPS32_COMPAT) += linux32.o ptrace32.o signal32.o
|
||||
obj-$(CONFIG_MIPS32_N32) += binfmt_elfn32.o scall64-n32.o signal_n32.o
|
||||
obj-$(CONFIG_MIPS32_O32) += binfmt_elfo32.o scall64-o32.o signal_o32.o
|
||||
obj-$(CONFIG_MIPS32_N32) += scall64-n32.o signal_n32.o
|
||||
obj-$(CONFIG_MIPS32_O32) += scall64-o32.o signal_o32.o
|
||||
|
||||
obj-$(CONFIG_KGDB) += kgdb.o
|
||||
obj-$(CONFIG_PROC_FS) += proc.o
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for n32 Linux/MIPS ELF binaries.
|
||||
* Author: Ralf Baechle (ralf@linux-mips.org)
|
||||
*
|
||||
* Copyright (C) 1999, 2001 Ralf Baechle
|
||||
* Copyright (C) 1999, 2001 Silicon Graphics, Inc.
|
||||
*
|
||||
* Heavily inspired by the 32-bit Sparc compat code which is
|
||||
* Copyright (C) 1995, 1996, 1997, 1998 David S. Miller (davem@redhat.com)
|
||||
* Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek (jj@ultra.linux.cz)
|
||||
*/
|
||||
|
||||
#define ELF_ARCH EM_MIPS
|
||||
#define ELF_CLASS ELFCLASS32
|
||||
#ifdef __MIPSEB__
|
||||
#define ELF_DATA ELFDATA2MSB;
|
||||
#else /* __MIPSEL__ */
|
||||
#define ELF_DATA ELFDATA2LSB;
|
||||
#endif
|
||||
|
||||
/* ELF register definitions */
|
||||
#define ELF_NGREG 45
|
||||
#define ELF_NFPREG 33
|
||||
|
||||
typedef unsigned long elf_greg_t;
|
||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||
|
||||
typedef double elf_fpreg_t;
|
||||
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
|
||||
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch elfn32_check_arch
|
||||
|
||||
#define TASK32_SIZE 0x7fff8000UL
|
||||
#undef ELF_ET_DYN_BASE
|
||||
#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <linux/elfcore.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/math64.h>
|
||||
|
||||
#define elf_prstatus elf_prstatus32
|
||||
struct elf_prstatus32
|
||||
{
|
||||
struct elf_siginfo pr_info; /* Info associated with signal */
|
||||
short pr_cursig; /* Current signal */
|
||||
unsigned int pr_sigpend; /* Set of pending signals */
|
||||
unsigned int pr_sighold; /* Set of held signals */
|
||||
pid_t pr_pid;
|
||||
pid_t pr_ppid;
|
||||
pid_t pr_pgrp;
|
||||
pid_t pr_sid;
|
||||
struct old_timeval32 pr_utime; /* User time */
|
||||
struct old_timeval32 pr_stime; /* System time */
|
||||
struct old_timeval32 pr_cutime;/* Cumulative user time */
|
||||
struct old_timeval32 pr_cstime;/* Cumulative system time */
|
||||
elf_gregset_t pr_reg; /* GP registers */
|
||||
int pr_fpvalid; /* True if math co-processor being used. */
|
||||
};
|
||||
|
||||
#define elf_prpsinfo elf_prpsinfo32
|
||||
struct elf_prpsinfo32
|
||||
{
|
||||
char pr_state; /* numeric process state */
|
||||
char pr_sname; /* char for pr_state */
|
||||
char pr_zomb; /* zombie */
|
||||
char pr_nice; /* nice val */
|
||||
unsigned int pr_flag; /* flags */
|
||||
__kernel_uid_t pr_uid;
|
||||
__kernel_gid_t pr_gid;
|
||||
pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* filename of executable */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
|
||||
};
|
||||
|
||||
#define elf_caddr_t u32
|
||||
#define init_elf_binfmt init_elfn32_binfmt
|
||||
|
||||
#define jiffies_to_timeval jiffies_to_old_timeval32
|
||||
static __inline__ void
|
||||
jiffies_to_old_timeval32(unsigned long jiffies, struct old_timeval32 *value)
|
||||
{
|
||||
/*
|
||||
* Convert jiffies to nanoseconds and separate with
|
||||
* one divide.
|
||||
*/
|
||||
u64 nsec = (u64)jiffies * TICK_NSEC;
|
||||
u32 rem;
|
||||
value->tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
|
||||
value->tv_usec = rem / NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
#define ELF_CORE_EFLAGS EF_MIPS_ABI2
|
||||
|
||||
#undef TASK_SIZE
|
||||
#define TASK_SIZE TASK_SIZE32
|
||||
|
||||
#undef ns_to_kernel_old_timeval
|
||||
#define ns_to_kernel_old_timeval ns_to_old_timeval32
|
||||
|
||||
/*
|
||||
* Some data types as stored in coredump.
|
||||
*/
|
||||
#define user_long_t compat_long_t
|
||||
#define user_siginfo_t compat_siginfo_t
|
||||
#define copy_siginfo_to_external copy_siginfo_to_external32
|
||||
|
||||
#include "../../../fs/binfmt_elf.c"
|
||||
@@ -1,116 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Support for o32 Linux/MIPS ELF binaries.
|
||||
* Author: Ralf Baechle (ralf@linux-mips.org)
|
||||
*
|
||||
* Copyright (C) 1999, 2001 Ralf Baechle
|
||||
* Copyright (C) 1999, 2001 Silicon Graphics, Inc.
|
||||
*
|
||||
* Heavily inspired by the 32-bit Sparc compat code which is
|
||||
* Copyright (C) 1995, 1996, 1997, 1998 David S. Miller (davem@redhat.com)
|
||||
* Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek (jj@ultra.linux.cz)
|
||||
*/
|
||||
|
||||
#define ELF_ARCH EM_MIPS
|
||||
#define ELF_CLASS ELFCLASS32
|
||||
#ifdef __MIPSEB__
|
||||
#define ELF_DATA ELFDATA2MSB;
|
||||
#else /* __MIPSEL__ */
|
||||
#define ELF_DATA ELFDATA2LSB;
|
||||
#endif
|
||||
|
||||
/* ELF register definitions */
|
||||
#define ELF_NGREG 45
|
||||
#define ELF_NFPREG 33
|
||||
|
||||
typedef unsigned int elf_greg_t;
|
||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||
|
||||
typedef double elf_fpreg_t;
|
||||
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
|
||||
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch elfo32_check_arch
|
||||
|
||||
#ifdef CONFIG_KVM_GUEST
|
||||
#define TASK32_SIZE 0x3fff8000UL
|
||||
#else
|
||||
#define TASK32_SIZE 0x7fff8000UL
|
||||
#endif
|
||||
#undef ELF_ET_DYN_BASE
|
||||
#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
|
||||
|
||||
#include <asm/processor.h>
|
||||
|
||||
#include <linux/elfcore.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/math64.h>
|
||||
|
||||
#define elf_prstatus elf_prstatus32
|
||||
struct elf_prstatus32
|
||||
{
|
||||
struct elf_siginfo pr_info; /* Info associated with signal */
|
||||
short pr_cursig; /* Current signal */
|
||||
unsigned int pr_sigpend; /* Set of pending signals */
|
||||
unsigned int pr_sighold; /* Set of held signals */
|
||||
pid_t pr_pid;
|
||||
pid_t pr_ppid;
|
||||
pid_t pr_pgrp;
|
||||
pid_t pr_sid;
|
||||
struct old_timeval32 pr_utime; /* User time */
|
||||
struct old_timeval32 pr_stime; /* System time */
|
||||
struct old_timeval32 pr_cutime;/* Cumulative user time */
|
||||
struct old_timeval32 pr_cstime;/* Cumulative system time */
|
||||
elf_gregset_t pr_reg; /* GP registers */
|
||||
int pr_fpvalid; /* True if math co-processor being used. */
|
||||
};
|
||||
|
||||
#define elf_prpsinfo elf_prpsinfo32
|
||||
struct elf_prpsinfo32
|
||||
{
|
||||
char pr_state; /* numeric process state */
|
||||
char pr_sname; /* char for pr_state */
|
||||
char pr_zomb; /* zombie */
|
||||
char pr_nice; /* nice val */
|
||||
unsigned int pr_flag; /* flags */
|
||||
__kernel_uid_t pr_uid;
|
||||
__kernel_gid_t pr_gid;
|
||||
pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* filename of executable */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
|
||||
};
|
||||
|
||||
#define elf_caddr_t u32
|
||||
#define init_elf_binfmt init_elf32_binfmt
|
||||
|
||||
#define jiffies_to_timeval jiffies_to_old_timeval32
|
||||
static inline void
|
||||
jiffies_to_old_timeval32(unsigned long jiffies, struct old_timeval32 *value)
|
||||
{
|
||||
/*
|
||||
* Convert jiffies to nanoseconds and separate with
|
||||
* one divide.
|
||||
*/
|
||||
u64 nsec = (u64)jiffies * TICK_NSEC;
|
||||
u32 rem;
|
||||
value->tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
|
||||
value->tv_usec = rem / NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
#undef TASK_SIZE
|
||||
#define TASK_SIZE TASK_SIZE32
|
||||
|
||||
#undef ns_to_kernel_old_timeval
|
||||
#define ns_to_kernel_old_timeval ns_to_old_timeval32
|
||||
|
||||
/*
|
||||
* Some data types as stored in coredump.
|
||||
*/
|
||||
#define user_long_t compat_long_t
|
||||
#define user_siginfo_t compat_siginfo_t
|
||||
#define copy_siginfo_to_external copy_siginfo_to_external32
|
||||
|
||||
#include "../../../fs/binfmt_elf.c"
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/war.h>
|
||||
|
||||
#ifndef CONFIG_BINFMT_ELF32
|
||||
#ifndef CONFIG_MIPS32_COMPAT
|
||||
/* Neither O32 nor N32, so define handle_sys here */
|
||||
#define handle_sys64 handle_sys
|
||||
#endif
|
||||
|
||||
@@ -335,7 +335,6 @@ source "kernel/Kconfig.hz"
|
||||
config COMPAT
|
||||
def_bool y
|
||||
depends on 64BIT
|
||||
select COMPAT_BINFMT_ELF if BINFMT_ELF
|
||||
|
||||
config SYSVIPC_COMPAT
|
||||
def_bool y
|
||||
|
||||
@@ -282,7 +282,6 @@ config COMPAT
|
||||
bool "Enable support for 32bit binaries"
|
||||
depends on PPC64
|
||||
default y if !CPU_LITTLE_ENDIAN
|
||||
select COMPAT_BINFMT_ELF
|
||||
select ARCH_WANT_OLD_COMPAT_IPC
|
||||
select COMPAT_OLD_SIGACTION
|
||||
|
||||
|
||||
@@ -119,8 +119,8 @@ static void fill_prstatus(struct elf_prstatus *prstatus, int pir,
|
||||
* As a PIR value could also be '0', add an offset of '100'
|
||||
* to every PIR to avoid misinterpretations in GDB.
|
||||
*/
|
||||
prstatus->pr_pid = cpu_to_be32(100 + pir);
|
||||
prstatus->pr_ppid = cpu_to_be32(1);
|
||||
prstatus->common.pr_pid = cpu_to_be32(100 + pir);
|
||||
prstatus->common.pr_ppid = cpu_to_be32(1);
|
||||
|
||||
/*
|
||||
* Indicate SIGUSR1 for crash initiated from kernel.
|
||||
@@ -130,7 +130,7 @@ static void fill_prstatus(struct elf_prstatus *prstatus, int pir,
|
||||
short sig;
|
||||
|
||||
sig = kernel_initiated ? SIGUSR1 : SIGTERM;
|
||||
prstatus->pr_cursig = cpu_to_be16(sig);
|
||||
prstatus->common.pr_cursig = cpu_to_be16(sig);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -426,7 +426,6 @@ config 64BIT
|
||||
config COMPAT
|
||||
def_bool y
|
||||
prompt "Kernel support for 31 bit emulation"
|
||||
select COMPAT_BINFMT_ELF if BINFMT_ELF
|
||||
select ARCH_WANT_OLD_COMPAT_IPC
|
||||
select COMPAT_OLD_SIGACTION
|
||||
select HAVE_UID16
|
||||
|
||||
@@ -365,7 +365,7 @@ static void *fill_cpu_elf_notes(void *ptr, int cpu, struct save_area *sa)
|
||||
memcpy(&nt_prstatus.pr_reg.gprs, sa->gprs, sizeof(sa->gprs));
|
||||
memcpy(&nt_prstatus.pr_reg.psw, sa->psw, sizeof(sa->psw));
|
||||
memcpy(&nt_prstatus.pr_reg.acrs, sa->acrs, sizeof(sa->acrs));
|
||||
nt_prstatus.pr_pid = cpu;
|
||||
nt_prstatus.common.pr_pid = cpu;
|
||||
/* Prepare fpregset (floating point) note */
|
||||
memset(&nt_fpregset, 0, sizeof(nt_fpregset));
|
||||
memcpy(&nt_fpregset.fpc, &sa->fpc, sizeof(sa->fpc));
|
||||
|
||||
@@ -494,7 +494,6 @@ config COMPAT
|
||||
bool
|
||||
depends on SPARC64
|
||||
default y
|
||||
select COMPAT_BINFMT_ELF
|
||||
select HAVE_UID16
|
||||
select ARCH_WANT_OLD_COMPAT_IPC
|
||||
select COMPAT_OLD_SIGACTION
|
||||
|
||||
@@ -32,6 +32,7 @@ config X86_64
|
||||
select MODULES_USE_ELF_RELA
|
||||
select NEED_DMA_MAP_STATE
|
||||
select SWIOTLB
|
||||
select ARCH_HAS_ELFCORE_COMPAT
|
||||
|
||||
config FORCE_DYNAMIC_FTRACE
|
||||
def_bool y
|
||||
@@ -2860,7 +2861,6 @@ config IA32_EMULATION
|
||||
depends on X86_64
|
||||
select ARCH_WANT_OLD_COMPAT_IPC
|
||||
select BINFMT_ELF
|
||||
select COMPAT_BINFMT_ELF
|
||||
select COMPAT_OLD_SIGACTION
|
||||
help
|
||||
Include code to run legacy 32-bit programs under a
|
||||
|
||||
@@ -159,17 +159,6 @@ struct compat_shmid64_ds {
|
||||
compat_ulong_t __unused5;
|
||||
};
|
||||
|
||||
/*
|
||||
* The type of struct elf_prstatus.pr_reg in compatible core dumps.
|
||||
*/
|
||||
typedef struct user_regs_struct compat_elf_gregset_t;
|
||||
|
||||
/* Full regset -- prstatus on x32, otherwise on ia32 */
|
||||
#define PRSTATUS_SIZE(S, R) (R != sizeof(S.pr_reg) ? 144 : 296)
|
||||
#define SET_PR_FPVALID(S, V, R) \
|
||||
do { *(int *) (((void *) &((S)->pr_reg)) + R) = (V); } \
|
||||
while (0)
|
||||
|
||||
#ifdef CONFIG_X86_X32_ABI
|
||||
#define COMPAT_USE_64BIT_TIME \
|
||||
(!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT))
|
||||
|
||||
@@ -364,7 +364,7 @@ do { \
|
||||
#define COMPAT_ARCH_DLINFO \
|
||||
if (exec->e_machine == EM_X86_64) \
|
||||
ARCH_DLINFO_X32; \
|
||||
else \
|
||||
else if (IS_ENABLED(CONFIG_IA32_EMULATION)) \
|
||||
ARCH_DLINFO_IA32
|
||||
|
||||
#define COMPAT_ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000)
|
||||
|
||||
31
arch/x86/include/asm/elfcore-compat.h
Normal file
31
arch/x86/include/asm/elfcore-compat.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef _ASM_X86_ELFCORE_COMPAT_H
|
||||
#define _ASM_X86_ELFCORE_COMPAT_H
|
||||
|
||||
#include <asm/user32.h>
|
||||
|
||||
/*
|
||||
* On amd64 we have two 32bit ABIs - i386 and x32. The latter
|
||||
* has bigger registers, so we use it for compat_elf_regset_t.
|
||||
* The former uses i386_elf_prstatus and PRSTATUS_SIZE/SET_PR_FPVALID
|
||||
* are used to choose the size and location of ->pr_fpvalid of
|
||||
* the layout actually used.
|
||||
*/
|
||||
typedef struct user_regs_struct compat_elf_gregset_t;
|
||||
|
||||
struct i386_elf_prstatus
|
||||
{
|
||||
struct compat_elf_prstatus_common common;
|
||||
struct user_regs_struct32 pr_reg;
|
||||
compat_int_t pr_fpvalid;
|
||||
};
|
||||
|
||||
#define PRSTATUS_SIZE \
|
||||
(user_64bit_mode(task_pt_regs(current)) \
|
||||
? sizeof(struct compat_elf_prstatus) \
|
||||
: sizeof(struct i386_elf_prstatus))
|
||||
#define SET_PR_FPVALID(S) \
|
||||
(*(user_64bit_mode(task_pt_regs(current)) \
|
||||
? &(S)->pr_fpvalid \
|
||||
: &((struct i386_elf_prstatus *)(S))->pr_fpvalid) = 1)
|
||||
|
||||
#endif
|
||||
33
block/bio.c
33
block/bio.c
@@ -851,6 +851,39 @@ int bio_add_pc_page(struct request_queue *q, struct bio *bio,
|
||||
}
|
||||
EXPORT_SYMBOL(bio_add_pc_page);
|
||||
|
||||
/**
|
||||
* bio_add_zone_append_page - attempt to add page to zone-append bio
|
||||
* @bio: destination bio
|
||||
* @page: page to add
|
||||
* @len: vec entry length
|
||||
* @offset: vec entry offset
|
||||
*
|
||||
* Attempt to add a page to the bio_vec maplist of a bio that will be submitted
|
||||
* for a zone-append request. This can fail for a number of reasons, such as the
|
||||
* bio being full or the target block device is not a zoned block device or
|
||||
* other limitations of the target block device. The target block device must
|
||||
* allow bio's up to PAGE_SIZE, so it is always possible to add a single page
|
||||
* to an empty bio.
|
||||
*
|
||||
* Returns: number of bytes added to the bio, or 0 in case of a failure.
|
||||
*/
|
||||
int bio_add_zone_append_page(struct bio *bio, struct page *page,
|
||||
unsigned int len, unsigned int offset)
|
||||
{
|
||||
struct request_queue *q = bio->bi_disk->queue;
|
||||
bool same_page = false;
|
||||
|
||||
if (WARN_ON_ONCE(bio_op(bio) != REQ_OP_ZONE_APPEND))
|
||||
return 0;
|
||||
|
||||
if (WARN_ON_ONCE(!blk_queue_is_zoned(q)))
|
||||
return 0;
|
||||
|
||||
return bio_add_hw_page(q, bio, page, len, offset,
|
||||
queue_max_zone_append_sectors(q), &same_page);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bio_add_zone_append_page);
|
||||
|
||||
/**
|
||||
* __bio_try_merge_page - try appending data to an existing bvec.
|
||||
* @bio: destination bio
|
||||
|
||||
@@ -326,6 +326,23 @@ config ACPI_THERMAL
|
||||
To compile this driver as a module, choose M here:
|
||||
the module will be called thermal.
|
||||
|
||||
config ACPI_PLATFORM_PROFILE
|
||||
tristate "ACPI Platform Profile Driver"
|
||||
default m
|
||||
help
|
||||
This driver adds support for platform-profiles on platforms that
|
||||
support it.
|
||||
|
||||
Platform-profiles can be used to control the platform behaviour. For
|
||||
example whether to operate in a lower power mode, in a higher
|
||||
power performance mode or between the two.
|
||||
|
||||
This driver provides the sysfs interface and is used as the registration
|
||||
point for platform specific drivers.
|
||||
|
||||
Which profiles are supported is determined on a per-platform basis and
|
||||
should be obtained from the platform specific driver.
|
||||
|
||||
config ACPI_CUSTOM_DSDT_FILE
|
||||
string "Custom DSDT Table file to include"
|
||||
default ""
|
||||
|
||||
@@ -79,6 +79,7 @@ obj-$(CONFIG_ACPI_PCI_SLOT) += pci_slot.o
|
||||
obj-$(CONFIG_ACPI_PROCESSOR) += processor.o
|
||||
obj-$(CONFIG_ACPI) += container.o
|
||||
obj-$(CONFIG_ACPI_THERMAL) += thermal.o
|
||||
obj-$(CONFIG_ACPI_PLATFORM_PROFILE) += platform_profile.o
|
||||
obj-$(CONFIG_ACPI_NFIT) += nfit/
|
||||
obj-$(CONFIG_ACPI_NUMA) += numa/
|
||||
obj-$(CONFIG_ACPI) += acpi_memhotplug.o
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
* Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "ACPI: AC: " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
@@ -18,8 +20,6 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <acpi/battery.h>
|
||||
|
||||
#define PREFIX "ACPI: "
|
||||
|
||||
#define ACPI_AC_CLASS "ac_adapter"
|
||||
#define ACPI_AC_DEVICE_NAME "AC Adapter"
|
||||
#define ACPI_AC_FILE_STATE "state"
|
||||
@@ -28,9 +28,6 @@
|
||||
#define ACPI_AC_STATUS_ONLINE 0x01
|
||||
#define ACPI_AC_STATUS_UNKNOWN 0xFF
|
||||
|
||||
#define _COMPONENT ACPI_AC_COMPONENT
|
||||
ACPI_MODULE_NAME("ac");
|
||||
|
||||
MODULE_AUTHOR("Paul Diefenbaugh");
|
||||
MODULE_DESCRIPTION("ACPI AC Adapter Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
@@ -102,8 +99,9 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
|
||||
status = acpi_evaluate_integer(ac->device->handle, "_PSR", NULL,
|
||||
&ac->state);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
ACPI_EXCEPTION((AE_INFO, status,
|
||||
"Error reading AC Adapter state"));
|
||||
acpi_handle_info(ac->device->handle,
|
||||
"Error reading AC Adapter state: %s\n",
|
||||
acpi_format_exception(status));
|
||||
ac->state = ACPI_AC_STATUS_UNKNOWN;
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -153,8 +151,8 @@ static void acpi_ac_notify(struct acpi_device *device, u32 event)
|
||||
|
||||
switch (event) {
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Unsupported event [0x%x]\n", event));
|
||||
acpi_handle_debug(device->handle, "Unsupported event [0x%x]\n",
|
||||
event);
|
||||
fallthrough;
|
||||
case ACPI_AC_NOTIFY_STATUS:
|
||||
case ACPI_NOTIFY_BUS_CHECK:
|
||||
@@ -278,9 +276,8 @@ static int acpi_ac_add(struct acpi_device *device)
|
||||
goto end;
|
||||
}
|
||||
|
||||
printk(KERN_INFO PREFIX "%s [%s] (%s)\n",
|
||||
acpi_device_name(device), acpi_device_bid(device),
|
||||
ac->state ? "on-line" : "off-line");
|
||||
pr_info("%s [%s] (%s)\n", acpi_device_name(device),
|
||||
acpi_device_bid(device), ac->state ? "on-line" : "off-line");
|
||||
|
||||
ac->battery_nb.notifier_call = acpi_ac_battery_notify;
|
||||
register_acpi_notifier(&ac->battery_nb);
|
||||
@@ -348,7 +345,7 @@ static int __init acpi_ac_init(void)
|
||||
for (i = 0; i < ARRAY_SIZE(acpi_ac_blacklist); i++)
|
||||
if (acpi_dev_present(acpi_ac_blacklist[i].hid, "1",
|
||||
acpi_ac_blacklist[i].hrv)) {
|
||||
pr_info(PREFIX "AC: found native %s PMIC, not loading\n",
|
||||
pr_info("found native %s PMIC, not loading\n",
|
||||
acpi_ac_blacklist[i].hid);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@@ -268,7 +268,12 @@ static int __init acpi_configfs_init(void)
|
||||
|
||||
acpi_table_group = configfs_register_default_group(root, "table",
|
||||
&acpi_tables_type);
|
||||
return PTR_ERR_OR_ZERO(acpi_table_group);
|
||||
if (IS_ERR(acpi_table_group)) {
|
||||
configfs_unregister_subsystem(&acpi_configfs);
|
||||
return PTR_ERR(acpi_table_group);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(acpi_configfs_init);
|
||||
|
||||
|
||||
@@ -261,7 +261,7 @@ static uint32_t acpi_pad_idle_cpus_num(void)
|
||||
return ps_tsk_num;
|
||||
}
|
||||
|
||||
static ssize_t acpi_pad_rrtime_store(struct device *dev,
|
||||
static ssize_t rrtime_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
unsigned long num;
|
||||
@@ -275,16 +275,14 @@ static ssize_t acpi_pad_rrtime_store(struct device *dev,
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t acpi_pad_rrtime_show(struct device *dev,
|
||||
static ssize_t rrtime_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return scnprintf(buf, PAGE_SIZE, "%d\n", round_robin_time);
|
||||
}
|
||||
static DEVICE_ATTR(rrtime, S_IRUGO|S_IWUSR,
|
||||
acpi_pad_rrtime_show,
|
||||
acpi_pad_rrtime_store);
|
||||
static DEVICE_ATTR_RW(rrtime);
|
||||
|
||||
static ssize_t acpi_pad_idlepct_store(struct device *dev,
|
||||
static ssize_t idlepct_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
unsigned long num;
|
||||
@@ -298,16 +296,14 @@ static ssize_t acpi_pad_idlepct_store(struct device *dev,
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t acpi_pad_idlepct_show(struct device *dev,
|
||||
static ssize_t idlepct_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return scnprintf(buf, PAGE_SIZE, "%d\n", idle_pct);
|
||||
}
|
||||
static DEVICE_ATTR(idlepct, S_IRUGO|S_IWUSR,
|
||||
acpi_pad_idlepct_show,
|
||||
acpi_pad_idlepct_store);
|
||||
static DEVICE_ATTR_RW(idlepct);
|
||||
|
||||
static ssize_t acpi_pad_idlecpus_store(struct device *dev,
|
||||
static ssize_t idlecpus_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
unsigned long num;
|
||||
@@ -319,16 +315,14 @@ static ssize_t acpi_pad_idlecpus_store(struct device *dev,
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t acpi_pad_idlecpus_show(struct device *dev,
|
||||
static ssize_t idlecpus_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
return cpumap_print_to_pagebuf(false, buf,
|
||||
to_cpumask(pad_busy_cpus_bits));
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(idlecpus, S_IRUGO|S_IWUSR,
|
||||
acpi_pad_idlecpus_show,
|
||||
acpi_pad_idlecpus_store);
|
||||
static DEVICE_ATTR_RW(idlecpus);
|
||||
|
||||
static int acpi_pad_add_sysfs(struct acpi_device *device)
|
||||
{
|
||||
|
||||
@@ -237,7 +237,7 @@ static ssize_t time_show(struct device *dev, struct device_attribute *attr,
|
||||
rt.tz, rt.daylight);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(time, S_IRUSR | S_IWUSR, time_show, time_store);
|
||||
static DEVICE_ATTR_RW(time);
|
||||
|
||||
static struct attribute *acpi_tad_time_attrs[] = {
|
||||
&dev_attr_time.attr,
|
||||
@@ -446,7 +446,7 @@ static ssize_t ac_alarm_show(struct device *dev, struct device_attribute *attr,
|
||||
return acpi_tad_alarm_read(dev, buf, ACPI_TAD_AC_TIMER);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(ac_alarm, S_IRUSR | S_IWUSR, ac_alarm_show, ac_alarm_store);
|
||||
static DEVICE_ATTR_RW(ac_alarm);
|
||||
|
||||
static ssize_t ac_policy_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@@ -462,7 +462,7 @@ static ssize_t ac_policy_show(struct device *dev, struct device_attribute *attr,
|
||||
return acpi_tad_policy_read(dev, buf, ACPI_TAD_AC_TIMER);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(ac_policy, S_IRUSR | S_IWUSR, ac_policy_show, ac_policy_store);
|
||||
static DEVICE_ATTR_RW(ac_policy);
|
||||
|
||||
static ssize_t ac_status_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@@ -478,7 +478,7 @@ static ssize_t ac_status_show(struct device *dev, struct device_attribute *attr,
|
||||
return acpi_tad_status_read(dev, buf, ACPI_TAD_AC_TIMER);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(ac_status, S_IRUSR | S_IWUSR, ac_status_show, ac_status_store);
|
||||
static DEVICE_ATTR_RW(ac_status);
|
||||
|
||||
static struct attribute *acpi_tad_attrs[] = {
|
||||
&dev_attr_caps.attr,
|
||||
@@ -505,7 +505,7 @@ static ssize_t dc_alarm_show(struct device *dev, struct device_attribute *attr,
|
||||
return acpi_tad_alarm_read(dev, buf, ACPI_TAD_DC_TIMER);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(dc_alarm, S_IRUSR | S_IWUSR, dc_alarm_show, dc_alarm_store);
|
||||
static DEVICE_ATTR_RW(dc_alarm);
|
||||
|
||||
static ssize_t dc_policy_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@@ -521,7 +521,7 @@ static ssize_t dc_policy_show(struct device *dev, struct device_attribute *attr,
|
||||
return acpi_tad_policy_read(dev, buf, ACPI_TAD_DC_TIMER);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(dc_policy, S_IRUSR | S_IWUSR, dc_policy_show, dc_policy_store);
|
||||
static DEVICE_ATTR_RW(dc_policy);
|
||||
|
||||
static ssize_t dc_status_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@@ -537,7 +537,7 @@ static ssize_t dc_status_show(struct device *dev, struct device_attribute *attr,
|
||||
return acpi_tad_status_read(dev, buf, ACPI_TAD_DC_TIMER);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(dc_status, S_IRUSR | S_IWUSR, dc_status_show, dc_status_store);
|
||||
static DEVICE_ATTR_RW(dc_status);
|
||||
|
||||
static struct attribute *acpi_tad_dc_attrs[] = {
|
||||
&dev_attr_dc_alarm.attr,
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
* Copyright (C) 2006 Thomas Tuttle <linux-kernel@ttuttle.net>
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "ACPI: video: " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
@@ -26,16 +28,11 @@
|
||||
#include <acpi/video.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#define PREFIX "ACPI: "
|
||||
|
||||
#define ACPI_VIDEO_BUS_NAME "Video Bus"
|
||||
#define ACPI_VIDEO_DEVICE_NAME "Video Device"
|
||||
|
||||
#define MAX_NAME_LEN 20
|
||||
|
||||
#define _COMPONENT ACPI_VIDEO_COMPONENT
|
||||
ACPI_MODULE_NAME("video");
|
||||
|
||||
MODULE_AUTHOR("Bruno Ducrot");
|
||||
MODULE_DESCRIPTION("ACPI Video Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
@@ -326,11 +323,11 @@ acpi_video_device_lcd_query_levels(acpi_handle handle,
|
||||
*levels = NULL;
|
||||
|
||||
status = acpi_evaluate_object(handle, "_BCL", NULL, &buffer);
|
||||
if (!ACPI_SUCCESS(status))
|
||||
if (ACPI_FAILURE(status))
|
||||
return status;
|
||||
obj = (union acpi_object *)buffer.pointer;
|
||||
if (!obj || (obj->type != ACPI_TYPE_PACKAGE)) {
|
||||
printk(KERN_ERR PREFIX "Invalid _BCL data\n");
|
||||
acpi_handle_info(handle, "Invalid _BCL data\n");
|
||||
status = -EFAULT;
|
||||
goto err;
|
||||
}
|
||||
@@ -354,7 +351,7 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
|
||||
status = acpi_execute_simple_method(device->dev->handle,
|
||||
"_BCM", level);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
ACPI_ERROR((AE_INFO, "Evaluating _BCM failed"));
|
||||
acpi_handle_info(device->dev->handle, "_BCM evaluation failed\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@@ -368,7 +365,7 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ACPI_ERROR((AE_INFO, "Current brightness invalid"));
|
||||
acpi_handle_info(device->dev->handle, "Current brightness invalid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -622,9 +619,8 @@ acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
|
||||
* BQC returned an invalid level.
|
||||
* Stop using it.
|
||||
*/
|
||||
ACPI_WARNING((AE_INFO,
|
||||
"%s returned an invalid level",
|
||||
buf));
|
||||
acpi_handle_info(device->dev->handle,
|
||||
"%s returned an invalid level", buf);
|
||||
device->cap._BQC = device->cap._BCQ = 0;
|
||||
} else {
|
||||
/*
|
||||
@@ -635,7 +631,8 @@ acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
|
||||
* ACPI video backlight still works w/ buggy _BQC.
|
||||
* http://bugzilla.kernel.org/show_bug.cgi?id=12233
|
||||
*/
|
||||
ACPI_WARNING((AE_INFO, "Evaluating %s failed", buf));
|
||||
acpi_handle_info(device->dev->handle,
|
||||
"%s evaluation failed", buf);
|
||||
device->cap._BQC = device->cap._BCQ = 0;
|
||||
}
|
||||
}
|
||||
@@ -675,7 +672,7 @@ acpi_video_device_EDID(struct acpi_video_device *device,
|
||||
if (obj && obj->type == ACPI_TYPE_BUFFER)
|
||||
*edid = obj;
|
||||
else {
|
||||
printk(KERN_ERR PREFIX "Invalid _DDC data\n");
|
||||
acpi_handle_info(device->dev->handle, "Invalid _DDC data\n");
|
||||
status = -EFAULT;
|
||||
kfree(obj);
|
||||
}
|
||||
@@ -827,10 +824,9 @@ int acpi_video_get_levels(struct acpi_device *device,
|
||||
int result = 0;
|
||||
u32 value;
|
||||
|
||||
if (!ACPI_SUCCESS(acpi_video_device_lcd_query_levels(device->handle,
|
||||
&obj))) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Could not query available "
|
||||
"LCD brightness level\n"));
|
||||
if (ACPI_FAILURE(acpi_video_device_lcd_query_levels(device->handle, &obj))) {
|
||||
acpi_handle_debug(device->handle,
|
||||
"Could not query available LCD brightness level\n");
|
||||
result = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
@@ -842,7 +838,6 @@ int acpi_video_get_levels(struct acpi_device *device,
|
||||
|
||||
br = kzalloc(sizeof(*br), GFP_KERNEL);
|
||||
if (!br) {
|
||||
printk(KERN_ERR "can't allocate memory\n");
|
||||
result = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
@@ -863,7 +858,7 @@ int acpi_video_get_levels(struct acpi_device *device,
|
||||
for (i = 0; i < obj->package.count; i++) {
|
||||
o = (union acpi_object *)&obj->package.elements[i];
|
||||
if (o->type != ACPI_TYPE_INTEGER) {
|
||||
printk(KERN_ERR PREFIX "Invalid data\n");
|
||||
acpi_handle_info(device->handle, "Invalid data\n");
|
||||
continue;
|
||||
}
|
||||
value = (u32) o->integer.value;
|
||||
@@ -900,7 +895,8 @@ int acpi_video_get_levels(struct acpi_device *device,
|
||||
br->levels[i] = br->levels[i - level_ac_battery];
|
||||
count += level_ac_battery;
|
||||
} else if (level_ac_battery > ACPI_VIDEO_FIRST_LEVEL)
|
||||
ACPI_ERROR((AE_INFO, "Too many duplicates in _BCL package"));
|
||||
acpi_handle_info(device->handle,
|
||||
"Too many duplicates in _BCL package");
|
||||
|
||||
/* Check if the _BCL package is in a reversed order */
|
||||
if (max_level == br->levels[ACPI_VIDEO_FIRST_LEVEL]) {
|
||||
@@ -910,8 +906,8 @@ int acpi_video_get_levels(struct acpi_device *device,
|
||||
sizeof(br->levels[ACPI_VIDEO_FIRST_LEVEL]),
|
||||
acpi_video_cmp_level, NULL);
|
||||
} else if (max_level != br->levels[count - 1])
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Found unordered _BCL package"));
|
||||
acpi_handle_info(device->handle,
|
||||
"Found unordered _BCL package");
|
||||
|
||||
br->count = count;
|
||||
*dev_br = br;
|
||||
@@ -989,9 +985,9 @@ set_level:
|
||||
if (result)
|
||||
goto out_free_levels;
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"found %d brightness levels\n",
|
||||
br->count - ACPI_VIDEO_FIRST_LEVEL));
|
||||
acpi_handle_debug(device->dev->handle, "found %d brightness levels\n",
|
||||
br->count - ACPI_VIDEO_FIRST_LEVEL);
|
||||
|
||||
return 0;
|
||||
|
||||
out_free_levels:
|
||||
@@ -1023,7 +1019,8 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
|
||||
if (acpi_has_method(device->dev->handle, "_BQC")) {
|
||||
device->cap._BQC = 1;
|
||||
} else if (acpi_has_method(device->dev->handle, "_BCQ")) {
|
||||
printk(KERN_WARNING FW_BUG "_BCQ is used instead of _BQC\n");
|
||||
acpi_handle_info(device->dev->handle,
|
||||
"_BCQ is used instead of _BQC\n");
|
||||
device->cap._BCQ = 1;
|
||||
}
|
||||
|
||||
@@ -1083,8 +1080,7 @@ static int acpi_video_bus_check(struct acpi_video_bus *video)
|
||||
/* Does this device support video switching? */
|
||||
if (video->cap._DOS || video->cap._DOD) {
|
||||
if (!video->cap._DOS) {
|
||||
printk(KERN_WARNING FW_BUG
|
||||
"ACPI(%s) defines _DOD but not _DOS\n",
|
||||
pr_info(FW_BUG "ACPI(%s) defines _DOD but not _DOS\n",
|
||||
acpi_device_bid(video->device));
|
||||
}
|
||||
video->flags.multihead = 1;
|
||||
@@ -1272,7 +1268,8 @@ acpi_video_device_bind(struct acpi_video_bus *video,
|
||||
ids = &video->attached_array[i];
|
||||
if (device->device_id == (ids->value.int_val & 0xffff)) {
|
||||
ids->bind_info = device;
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "device_bind %d\n", i));
|
||||
acpi_handle_debug(video->device->handle, "%s: %d\n",
|
||||
__func__, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1324,20 +1321,22 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
|
||||
return AE_NOT_EXIST;
|
||||
|
||||
status = acpi_evaluate_object(video->device->handle, "_DOD", NULL, &buffer);
|
||||
if (!ACPI_SUCCESS(status)) {
|
||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _DOD"));
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_handle_info(video->device->handle,
|
||||
"_DOD evaluation failed: %s\n",
|
||||
acpi_format_exception(status));
|
||||
return status;
|
||||
}
|
||||
|
||||
dod = buffer.pointer;
|
||||
if (!dod || (dod->type != ACPI_TYPE_PACKAGE)) {
|
||||
ACPI_EXCEPTION((AE_INFO, status, "Invalid _DOD data"));
|
||||
acpi_handle_info(video->device->handle, "Invalid _DOD data\n");
|
||||
status = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d video heads in _DOD\n",
|
||||
dod->package.count));
|
||||
acpi_handle_debug(video->device->handle, "Found %d video heads in _DOD\n",
|
||||
dod->package.count);
|
||||
|
||||
active_list = kcalloc(1 + dod->package.count,
|
||||
sizeof(struct acpi_video_enumerated_device),
|
||||
@@ -1352,15 +1351,18 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
|
||||
obj = &dod->package.elements[i];
|
||||
|
||||
if (obj->type != ACPI_TYPE_INTEGER) {
|
||||
printk(KERN_ERR PREFIX
|
||||
"Invalid _DOD data in element %d\n", i);
|
||||
acpi_handle_info(video->device->handle,
|
||||
"Invalid _DOD data in element %d\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
active_list[count].value.int_val = obj->integer.value;
|
||||
active_list[count].bind_info = NULL;
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "dod element[%d] = %d\n", i,
|
||||
(int)obj->integer.value));
|
||||
|
||||
acpi_handle_debug(video->device->handle,
|
||||
"_DOD element[%d] = %d\n", i,
|
||||
(int)obj->integer.value);
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
@@ -1451,7 +1453,8 @@ acpi_video_switch_brightness(struct work_struct *work)
|
||||
|
||||
out:
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX "Failed to switch the brightness\n");
|
||||
acpi_handle_info(device->dev->handle,
|
||||
"Failed to switch brightness\n");
|
||||
}
|
||||
|
||||
int acpi_video_get_edid(struct acpi_device *device, int type, int device_id,
|
||||
@@ -1601,8 +1604,8 @@ static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
|
||||
break;
|
||||
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Unsupported event [0x%x]\n", event));
|
||||
acpi_handle_debug(device->handle, "Unsupported event [0x%x]\n",
|
||||
event);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1675,8 +1678,7 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
|
||||
keycode = KEY_DISPLAY_OFF;
|
||||
break;
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Unsupported event [0x%x]\n", event));
|
||||
acpi_handle_debug(handle, "Unsupported event [0x%x]\n", event);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1812,11 +1814,12 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device)
|
||||
&device->cooling_dev->device.kobj,
|
||||
"thermal_cooling");
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
pr_info("sysfs link creation failed\n");
|
||||
|
||||
result = sysfs_create_link(&device->cooling_dev->device.kobj,
|
||||
&device->dev->dev.kobj, "device");
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
pr_info("Reverse sysfs link creation failed\n");
|
||||
}
|
||||
|
||||
static void acpi_video_run_bcl_for_osi(struct acpi_video_bus *video)
|
||||
@@ -2030,7 +2033,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
||||
acpi_video_bus_match, NULL,
|
||||
device, NULL);
|
||||
if (status == AE_ALREADY_EXISTS) {
|
||||
printk(KERN_WARNING FW_BUG
|
||||
pr_info(FW_BUG
|
||||
"Duplicate ACPI video bus devices for the"
|
||||
" same VGA controller, please try module "
|
||||
"parameter \"video.allow_duplicates=1\""
|
||||
@@ -2073,7 +2076,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
|
||||
if (error)
|
||||
goto err_put_video;
|
||||
|
||||
printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s rom: %s post: %s)\n",
|
||||
pr_info("%s [%s] (multi-head: %s rom: %s post: %s)\n",
|
||||
ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
|
||||
video->flags.multihead ? "yes" : "no",
|
||||
video->flags.rom ? "yes" : "no",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: acapps - common include for ACPI applications/tools
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* Common info for tool signons */
|
||||
|
||||
#define ACPICA_NAME "Intel ACPI Component Architecture"
|
||||
#define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2020 Intel Corporation"
|
||||
#define ACPICA_COPYRIGHT "Copyright (c) 2000 - 2021 Intel Corporation"
|
||||
|
||||
#if ACPI_MACHINE_WIDTH == 64
|
||||
#define ACPI_WIDTH " (64-bit version)"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: accommon.h - Common include files for generation of ACPICA source
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: acapps - common include for ACPI applications/tools
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acdebug.h - ACPI/AML debugger
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acdispat.h - dispatcher (parser to interpreter interface)
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acevents.h - Event subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acglobal.h - Declarations for global variables
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: achware.h -- hardware specific interfaces
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acinterp.h - Interpreter subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: aclocal.h - Internal data types used across the ACPI subsystem
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acmacros.h - C macros for the entire subsystem.
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acnamesp.h - Namespace subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acobject.h - Definition of union acpi_operand_object (Internal object only)
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acopcode.h - AML opcode information for the AML parser and interpreter
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: acparser.h - AML Parser subcomponent prototypes and defines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acpredef - Information table for ACPI predefined methods and objects
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acresrc.h - Resource Manager function prototypes
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acstruct.h - Internal structs
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: actables.h - ACPI table management
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Declarations and definitions contained herein are derived
|
||||
* directly from the ACPI specification.
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: amlresrc.h - AML resource descriptors
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dbhistry - debugger HISTORY command
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -473,7 +473,7 @@ char *acpi_db_get_next_token(char *string,
|
||||
|
||||
/* Remove any spaces at the beginning, ignore blank lines */
|
||||
|
||||
while (*string && isspace(*string)) {
|
||||
while (*string && isspace((int)*string)) {
|
||||
string++;
|
||||
}
|
||||
|
||||
@@ -571,7 +571,7 @@ char *acpi_db_get_next_token(char *string,
|
||||
|
||||
/* Find end of token */
|
||||
|
||||
while (*string && !isspace(*string)) {
|
||||
while (*string && !isspace((int)*string)) {
|
||||
string++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -47,7 +47,7 @@ acpi_db_dump_method_info(acpi_status status, struct acpi_walk_state *walk_state)
|
||||
|
||||
/* Ignore control codes, they are not errors */
|
||||
|
||||
if ((status & AE_CODE_MASK) == AE_CODE_CONTROL) {
|
||||
if (ACPI_CNTL_EXCEPTION(status)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: dsargs - Support for execution of dynamic arguments for static
|
||||
* objects (regions, fields, buffer fields, etc.)
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: dscontrol - Support for execution control opcodes -
|
||||
* if/else/while/return
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -62,7 +62,7 @@ acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
|
||||
}
|
||||
}
|
||||
|
||||
/*lint -fallthrough */
|
||||
ACPI_FALLTHROUGH;
|
||||
|
||||
case AML_IF_OP:
|
||||
/*
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsdebug - Parser/Interpreter interface - debugging
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -100,7 +100,7 @@ acpi_ds_dump_method_stack(acpi_status status,
|
||||
|
||||
/* Ignore control codes, they are not errors */
|
||||
|
||||
if ((status & AE_CODE_MASK) == AE_CODE_CONTROL) {
|
||||
if (ACPI_CNTL_EXCEPTION(status)) {
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsfield - Dispatcher field routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsinit - Object initialization namespace walk
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsmethod - Parser/Interpreter interface - control method parsing
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsobject - Dispatcher object management routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dsopcode - Dispatcher support for regions and fields
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dspkginit - Completion of deferred package initialization
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: dswexec - Dispatcher method execution callbacks;
|
||||
* dispatch to interpreter.
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -598,8 +598,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Fall through */
|
||||
/*lint -fallthrough */
|
||||
ACPI_FALLTHROUGH;
|
||||
|
||||
case AML_INT_EVAL_SUBTREE_OP:
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswload - Dispatcher first pass namespace load callbacks
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -224,7 +224,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
|
||||
break;
|
||||
}
|
||||
|
||||
/*lint -fallthrough */
|
||||
ACPI_FALLTHROUGH;
|
||||
|
||||
default:
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswload2 - Dispatcher second pass namespace load callbacks
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -214,7 +214,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
|
||||
break;
|
||||
}
|
||||
|
||||
/*lint -fallthrough */
|
||||
ACPI_FALLTHROUGH;
|
||||
|
||||
default:
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswscope - Scope stack manipulation
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: dswstate - Dispatcher parse tree walk management routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evevent - Fixed Event handling and dispatch
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evglock - Global Lock support
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpe - General Purpose Event handling and dispatch
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpeblk - GPE block creation and initialization.
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpeinit - System GPE initialization and update
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evgpeutil - GPE utilities
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evhandler - Support for Address Space handlers
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evmisc - Miscellaneous event manager support functions
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evregion - Operation Region support
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evrgnini- ACPI address_space (op_region) init
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evxface - External interfaces for ACPI events
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: evxfgpe - External Interfaces for General Purpose Events (GPEs)
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Module Name: evxfregn - External Interfaces, ACPI Operation Regions and
|
||||
* Address Spaces.
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exconcat - Concatenate-type AML operators
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exconfig - Namespace reconfiguration (Load/Unload opcodes)
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exconvrt - Object conversion routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: excreate - Named object creation
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exdebug - Support for stores to the AML Debug Object
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exdump - Interpreter debug output routines
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exfield - AML execution - field_unit read/write
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exfldio - Aml Field I/O
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
@@ -434,7 +434,7 @@ acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
|
||||
* region_field case and write the datum to the Operation Region
|
||||
*/
|
||||
|
||||
/*lint -fallthrough */
|
||||
ACPI_FALLTHROUGH;
|
||||
|
||||
case ACPI_TYPE_LOCAL_REGION_FIELD:
|
||||
/*
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exmisc - ACPI AML (p-code) execution - specific opcodes
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Module Name: exmutex - ASL Mutex Acquire/Release functions
|
||||
*
|
||||
* Copyright (C) 2000 - 2020, Intel Corp.
|
||||
* Copyright (C) 2000 - 2021, Intel Corp.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user