mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
ACPI material for v4.7-rc1
- In-kernel ACPICA code update to the upstream release 20160422 adding support for ACPI 6.1 along with some previously missing bits of ACPI 6.0 support, making a fair amount of fixes and cleanups and reducing divergences between the upstream ACPICA and the in-kernel code (Bob Moore, Lv Zheng, Al Stone, Aleksey Makarov, Will Miles). - ACPI Generic Event Device (GED) support and a fix for it (Sinan Kaya, Paul Gortmaker). - INT3406 thermal driver for display thermal management and ACPI backlight support code reorganization related to it (Aaron Lu, Arnd Bergmann). - Support for exporting the value returned by the _HRV (hardware revision) ACPI object via sysfs (Betty Dall). - Removal of the EXPERT dependency for ACPI on ARM64 (Mark Brown). - Rework of the handling of ACPI _OSI mechanism allowing the _OSI("Darwin") support to be overridden from the kernel command line among other things (Lv Zheng, Chen Yu). - Rework of the ACPI tables override mechanism to prepare it for the introduction of overlays support going forward (Lv Zheng, Rafael Wysocki). - Fixes related to the ECDT support and module-level execution of AML (Lv Zheng). - ACPI PCI interrupts management update to make it work better on ARM64 mostly (Sinan Kaya). - ACPI SRAT handling update to make the code process all entires in the table order regardless of the entry type (Lukasz Anaczkowski). - EFI power off support for full-hardware ACPI platforms that don't support ACPI S5 (Chen Yu). - Fixes and cleanups related to the ACPI core's sysfs interface (Dan Carpenter, Betty Dall). - acpi_dev_present() API rework to reduce possible confusion related to it (Lukas Wunner). - Removal of CLK_IS_ROOT from two ACPI drivers (Stephen Boyd). / -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCAAGBQJXOjM+AAoJEILEb/54YlRxNO4P/0FsajR2iXfHybiHyJq+Iddk MX+Jealb5klnXXtuih90oOHft9NypV1ESO7bcmjSz+2tuSgoXifdI3GO0aFghj7v h8SaVpCGzlm+u8y+Ppbxk+eWHAV1+ohV8uaO47yDUjuyZgG6c702QqrJVaqunQoq KQd+kqK5bhcaLhrx9Ro0I4Jbz0TdFa8j7noUTRXtDfJ9V4xZ3a6QfXz3H6GU4L31 kNKjroxkFXpHMj2mYXuskqw2IWoRZw7Z7kpLv0dM44nko6c+oM8/9BIx4xh1IbR4 vvgn/C2QYe45fz4Or/qmrPzGZ/kQtLiiVC2B/GWbCTezu3Px9E3V2NI0xLktVe0g Y/MsRdzMs0TInWSVezOlTONmfcqZgPhbSmsuI9PJ7izxmzOLVk6tjXARkzWe2gQ0 N/nOd7I8AMsTMdpBCvf6xjJXqHRl6jdXuHAIhcPC5DINQ0daz8FZ4Cw42MtVKo0I 2OiZ7ZnAnDDHrptV9VwtEvo60Uw/QG8EhdMWyQVaFWe1pFNM9nQtD0P2QeMWUHhZ YL7Q63nM8flQIywcSj7jyMWroWZMOI/cFOLGxZjz+yXA3fRizl4J22kJ392gSQti da1X8OBKsOvYQutkeGeQCNYWp4j5uKpoMoR4iR4dOLNqguWxaicDSZgsU8cAAk0k W+lRS/E8l+we5rxEZYOd =rAwm -----END PGP SIGNATURE----- Merge tag 'acpi-4.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull ACPI updates from Rafael Wysocki: "The new features here are ACPI 6.1 support (and some previously missing bits of ACPI 6.0 support) in ACPICA and two new drivers, a driver for the ACPI Generic Event Device (GED) feature introduced by ACPI 6.1 and the INT3406 thermal driver for display thermal management. Also the value returned by the _HRV (hardware revision) ACPI object will be exported to user space via sysfs now. In addition to that, ACPI on ARM64 will not depend on EXPERT any more. The rest is mostly fixes and cleanups and some code reorganization. Specifics: - In-kernel ACPICA code update to the upstream release 20160422 adding support for ACPI 6.1 along with some previously missing bits of ACPI 6.0 support, making a fair amount of fixes and cleanups and reducing divergences between the upstream ACPICA and the in-kernel code (Bob Moore, Lv Zheng, Al Stone, Aleksey Makarov, Will Miles) - ACPI Generic Event Device (GED) support and a fix for it (Sinan Kaya, Paul Gortmaker) - INT3406 thermal driver for display thermal management and ACPI backlight support code reorganization related to it (Aaron Lu, Arnd Bergmann) - Support for exporting the value returned by the _HRV (hardware revision) ACPI object via sysfs (Betty Dall) - Removal of the EXPERT dependency for ACPI on ARM64 (Mark Brown) - Rework of the handling of ACPI _OSI mechanism allowing the _OSI("Darwin") support to be overridden from the kernel command line among other things (Lv Zheng, Chen Yu) - Rework of the ACPI tables override mechanism to prepare it for the introduction of overlays support going forward (Lv Zheng, Rafael Wysocki) - Fixes related to the ECDT support and module-level execution of AML (Lv Zheng) - ACPI PCI interrupts management update to make it work better on ARM64 mostly (Sinan Kaya) - ACPI SRAT handling update to make the code process all entires in the table order regardless of the entry type (Lukasz Anaczkowski) - EFI power off support for full-hardware ACPI platforms that don't support ACPI S5 (Chen Yu) - Fixes and cleanups related to the ACPI core's sysfs interface (Dan Carpenter, Betty Dall) - acpi_dev_present() API rework to reduce possible confusion related to it (Lukas Wunner) - Removal of CLK_IS_ROOT from two ACPI drivers (Stephen Boyd)" * tag 'acpi-4.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (82 commits) ACPI / video: mark acpi_video_get_levels() inline Thermal / ACPI / video: add INT3406 thermal driver ACPI / GED: make evged.c explicitly non-modular ACPI / tables: Fix DSDT override mechanism ACPI / sysfs: fix error code in get_status() ACPICA: Update version to 20160422 ACPICA: Move all ASCII utilities to a common file ACPICA: ACPI 2.0, Hardware: Add access_width/bit_offset support for acpi_hw_write() ACPICA: ACPI 2.0, Hardware: Add access_width/bit_offset support in acpi_hw_read() ACPICA: Executer: Introduce a set of macros to handle bit width mask generation ACPICA: Hardware: Add optimized access bit width support ACPICA: Utilities: Add ACPI_IS_ALIGNED() macro ACPICA: Renamed some #defined flag constants for clarity ACPICA: ACPI 6.0, tools/iasl: Add support for new resource descriptors ACPICA: ACPI 6.0: Update _BIX support for new package element ACPICA: ACPI 6.1: Support for new PCCT subtable ACPICA: Refactor evaluate_object to reduce nesting ACPICA: Divergence: remove unwanted spaces for typedef ACPI,PCI,IRQ: remove SCI penalize function ACPI,PCI,IRQ: remove redundant code in acpi_irq_penalty_init() ..
This commit is contained in:
commit
46c1345062
@ -1,5 +1,5 @@
|
||||
Overriding ACPI tables via initrd
|
||||
=================================
|
||||
Upgrading ACPI tables via initrd
|
||||
================================
|
||||
|
||||
1) Introduction (What is this about)
|
||||
2) What is this for
|
||||
@ -9,12 +9,14 @@ Overriding ACPI tables via initrd
|
||||
1) What is this about
|
||||
---------------------
|
||||
|
||||
If the ACPI_INITRD_TABLE_OVERRIDE compile option is true, it is possible to
|
||||
override nearly any ACPI table provided by the BIOS with an instrumented,
|
||||
modified one.
|
||||
If the ACPI_TABLE_UPGRADE compile option is true, it is possible to
|
||||
upgrade the ACPI execution environment that is defined by the ACPI tables
|
||||
via upgrading the ACPI tables provided by the BIOS with an instrumented,
|
||||
modified, more recent version one, or installing brand new ACPI tables.
|
||||
|
||||
For a full list of ACPI tables that can be overridden, take a look at
|
||||
the char *table_sigs[MAX_ACPI_SIGNATURE]; definition in drivers/acpi/osl.c
|
||||
For a full list of ACPI tables that can be upgraded/installed, take a look
|
||||
at the char *table_sigs[MAX_ACPI_SIGNATURE]; definition in
|
||||
drivers/acpi/tables.c.
|
||||
All ACPI tables iasl (Intel's ACPI compiler and disassembler) knows should
|
||||
be overridable, except:
|
||||
- ACPI_SIG_RSDP (has a signature of 6 bytes)
|
||||
@ -25,17 +27,20 @@ Both could get implemented as well.
|
||||
2) What is this for
|
||||
-------------------
|
||||
|
||||
Please keep in mind that this is a debug option.
|
||||
ACPI tables should not get overridden for productive use.
|
||||
If BIOS ACPI tables are overridden the kernel will get tainted with the
|
||||
TAINT_OVERRIDDEN_ACPI_TABLE flag.
|
||||
Complain to your platform/BIOS vendor if you find a bug which is so sever
|
||||
that a workaround is not accepted in the Linux kernel.
|
||||
Complain to your platform/BIOS vendor if you find a bug which is so severe
|
||||
that a workaround is not accepted in the Linux kernel. And this facility
|
||||
allows you to upgrade the buggy tables before your platform/BIOS vendor
|
||||
releases an upgraded BIOS binary.
|
||||
|
||||
Still, it can and should be enabled in any kernel, because:
|
||||
- There is no functional change with not instrumented initrds
|
||||
- It provides a powerful feature to easily debug and test ACPI BIOS table
|
||||
compatibility with the Linux kernel.
|
||||
This facility can be used by platform/BIOS vendors to provide a Linux
|
||||
compatible environment without modifying the underlying platform firmware.
|
||||
|
||||
This facility also provides a powerful feature to easily debug and test
|
||||
ACPI BIOS table compatibility with the Linux kernel by modifying old
|
||||
platform provided ACPI tables or inserting new ACPI tables.
|
||||
|
||||
It can and should be enabled in any kernel because there is no functional
|
||||
change with not instrumented initrds.
|
||||
|
||||
|
||||
3) How does it work
|
||||
@ -50,23 +55,31 @@ iasl -d *.dat
|
||||
# For example add this statement into a _PRT (PCI Routing Table) function
|
||||
# of the DSDT:
|
||||
Store("HELLO WORLD", debug)
|
||||
# And increase the OEM Revision. For example, before modification:
|
||||
DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000)
|
||||
# After modification:
|
||||
DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001)
|
||||
iasl -sa dsdt.dsl
|
||||
# Add the raw ACPI tables to an uncompressed cpio archive.
|
||||
# They must be put into a /kernel/firmware/acpi directory inside the
|
||||
# cpio archive.
|
||||
# The uncompressed cpio archive must be the first.
|
||||
# Other, typically compressed cpio archives, must be
|
||||
# concatenated on top of the uncompressed one.
|
||||
# They must be put into a /kernel/firmware/acpi directory inside the cpio
|
||||
# archive. Note that if the table put here matches a platform table
|
||||
# (similar Table Signature, and similar OEMID, and similar OEM Table ID)
|
||||
# with a more recent OEM Revision, the platform table will be upgraded by
|
||||
# this table. If the table put here doesn't match a platform table
|
||||
# (dissimilar Table Signature, or dissimilar OEMID, or dissimilar OEM Table
|
||||
# ID), this table will be appended.
|
||||
mkdir -p kernel/firmware/acpi
|
||||
cp dsdt.aml kernel/firmware/acpi
|
||||
# A maximum of: #define ACPI_OVERRIDE_TABLES 10
|
||||
# tables are currently allowed (see osl.c):
|
||||
# A maximum of "NR_ACPI_INITRD_TABLES (64)" tables are currently allowed
|
||||
# (see osl.c):
|
||||
iasl -sa facp.dsl
|
||||
iasl -sa ssdt1.dsl
|
||||
cp facp.aml kernel/firmware/acpi
|
||||
cp ssdt1.aml kernel/firmware/acpi
|
||||
# Create the uncompressed cpio archive and concatenate the original initrd
|
||||
# on top:
|
||||
# The uncompressed cpio archive must be the first. Other, typically
|
||||
# compressed cpio archives, must be concatenated on top of the uncompressed
|
||||
# one. Following command creates the uncompressed cpio archive and
|
||||
# concatenates the original initrd on top:
|
||||
find kernel | cpio -H newc --create > /boot/instrumented_initrd
|
||||
cat /boot/initrd >>/boot/instrumented_initrd
|
||||
# reboot with increased acpi debug level, e.g. boot params:
|
||||
|
@ -315,6 +315,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
acpi_osi=!* # remove all strings
|
||||
acpi_osi=! # disable all built-in OS vendor
|
||||
strings
|
||||
acpi_osi=!! # enable all built-in OS vendor
|
||||
strings
|
||||
acpi_osi= # disable all strings
|
||||
|
||||
'acpi_osi=!' can be used in combination with single or
|
||||
|
@ -264,6 +264,7 @@ CONFIG_PHY_RCAR_GEN3_USB2=y
|
||||
CONFIG_PHY_HI6220_USB=y
|
||||
CONFIG_PHY_XGENE=y
|
||||
CONFIG_ARM_SCPI_PROTOCOL=y
|
||||
CONFIG_ACPI=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_FANOTIFY=y
|
||||
|
@ -445,7 +445,6 @@ static void __init acpi_sci_ioapic_setup(u8 bus_irq, u16 polarity, u16 trigger,
|
||||
polarity = acpi_sci_flags & ACPI_MADT_POLARITY_MASK;
|
||||
|
||||
mp_override_legacy_irq(bus_irq, polarity, trigger, gsi);
|
||||
acpi_penalize_sci_irq(bus_irq, trigger, polarity);
|
||||
|
||||
/*
|
||||
* stash over-ride to indicate we've been here
|
||||
|
@ -398,6 +398,11 @@ static void __init reserve_initrd(void)
|
||||
|
||||
memblock_free(ramdisk_image, ramdisk_end - ramdisk_image);
|
||||
}
|
||||
|
||||
static void __init early_initrd_acpi_init(void)
|
||||
{
|
||||
early_acpi_table_init((void *)initrd_start, initrd_end - initrd_start);
|
||||
}
|
||||
#else
|
||||
static void __init early_reserve_initrd(void)
|
||||
{
|
||||
@ -405,6 +410,9 @@ static void __init early_reserve_initrd(void)
|
||||
static void __init reserve_initrd(void)
|
||||
{
|
||||
}
|
||||
static void __init early_initrd_acpi_init(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||
|
||||
static void __init parse_setup_data(void)
|
||||
@ -1138,9 +1146,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
reserve_initrd();
|
||||
|
||||
#if defined(CONFIG_ACPI) && defined(CONFIG_BLK_DEV_INITRD)
|
||||
acpi_initrd_override((void *)initrd_start, initrd_end - initrd_start);
|
||||
#endif
|
||||
early_initrd_acpi_init();
|
||||
|
||||
vsmp_init();
|
||||
|
||||
|
@ -396,7 +396,6 @@ int __init pci_acpi_init(void)
|
||||
return -ENODEV;
|
||||
|
||||
printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n");
|
||||
acpi_irq_penalty_init();
|
||||
pcibios_enable_irq = acpi_pci_irq_enable;
|
||||
pcibios_disable_irq = acpi_pci_irq_disable;
|
||||
x86_init.pci.init_irq = x86_init_noop;
|
||||
|
@ -371,5 +371,5 @@ bool efi_reboot_required(void)
|
||||
|
||||
bool efi_poweroff_required(void)
|
||||
{
|
||||
return !!acpi_gbl_reduced_hardware;
|
||||
return acpi_gbl_reduced_hardware || acpi_no_s5;
|
||||
}
|
||||
|
@ -5,10 +5,10 @@
|
||||
menuconfig ACPI
|
||||
bool "ACPI (Advanced Configuration and Power Interface) Support"
|
||||
depends on !IA64_HP_SIM
|
||||
depends on IA64 || X86 || (ARM64 && EXPERT)
|
||||
depends on IA64 || X86 || ARM64
|
||||
depends on PCI
|
||||
select PNP
|
||||
default y
|
||||
default y if (IA64 || X86)
|
||||
help
|
||||
Advanced Configuration and Power Interface (ACPI) support for
|
||||
Linux requires an ACPI-compliant platform (hardware/firmware),
|
||||
@ -311,12 +311,12 @@ config ACPI_CUSTOM_DSDT
|
||||
bool
|
||||
default ACPI_CUSTOM_DSDT_FILE != ""
|
||||
|
||||
config ACPI_INITRD_TABLE_OVERRIDE
|
||||
bool "ACPI tables override via initrd"
|
||||
config ACPI_TABLE_UPGRADE
|
||||
bool "Allow upgrading ACPI tables via initrd"
|
||||
depends on BLK_DEV_INITRD && X86
|
||||
default n
|
||||
default y
|
||||
help
|
||||
This option provides functionality to override arbitrary ACPI tables
|
||||
This option provides functionality to upgrade arbitrary ACPI tables
|
||||
via initrd. No functional change if no ACPI tables are passed via
|
||||
initrd, therefore it's safe to say Y.
|
||||
See Documentation/acpi/initrd_table_override.txt for details
|
||||
|
@ -18,7 +18,7 @@ obj-$(CONFIG_ACPI) += acpi.o \
|
||||
acpica/
|
||||
|
||||
# All the builtin files are in the "acpi." module_param namespace.
|
||||
acpi-y += osl.o utils.o reboot.o
|
||||
acpi-y += osi.o osl.o utils.o reboot.o
|
||||
acpi-y += nvs.o
|
||||
|
||||
# Power management related files
|
||||
@ -47,6 +47,7 @@ acpi-$(CONFIG_ARM_AMBA) += acpi_amba.o
|
||||
acpi-y += int340x_thermal.o
|
||||
acpi-y += power.o
|
||||
acpi-y += event.o
|
||||
acpi-$(CONFIG_ACPI_REDUCED_HARDWARE_ONLY) += evged.o
|
||||
acpi-y += sysfs.o
|
||||
acpi-y += property.o
|
||||
acpi-$(CONFIG_X86) += acpi_cmos_rtc.o
|
||||
|
@ -35,8 +35,7 @@ static void amba_register_dummy_clk(void)
|
||||
if (amba_dummy_clk)
|
||||
return;
|
||||
|
||||
amba_dummy_clk = clk_register_fixed_rate(NULL, "apb_pclk", NULL,
|
||||
CLK_IS_ROOT, 0);
|
||||
amba_dummy_clk = clk_register_fixed_rate(NULL, "apb_pclk", NULL, 0, 0);
|
||||
clk_register_clkdev(amba_dummy_clk, "apb_pclk", NULL);
|
||||
}
|
||||
|
||||
|
@ -62,8 +62,7 @@ static int acpi_apd_setup(struct apd_private_data *pdata)
|
||||
if (dev_desc->fixed_clk_rate) {
|
||||
clk = clk_register_fixed_rate(&pdata->adev->dev,
|
||||
dev_name(&pdata->adev->dev),
|
||||
NULL, CLK_IS_ROOT,
|
||||
dev_desc->fixed_clk_rate);
|
||||
NULL, 0, dev_desc->fixed_clk_rate);
|
||||
clk_register_clkdev(clk, NULL, dev_name(&pdata->adev->dev));
|
||||
pdata->clk = clk;
|
||||
}
|
||||
|
@ -191,19 +191,6 @@ struct acpi_video_device_cap {
|
||||
u8 _DDC:1; /* Return the EDID for this device */
|
||||
};
|
||||
|
||||
struct acpi_video_brightness_flags {
|
||||
u8 _BCL_no_ac_battery_levels:1; /* no AC/Battery levels in _BCL */
|
||||
u8 _BCL_reversed:1; /* _BCL package is in a reversed order */
|
||||
u8 _BQC_use_index:1; /* _BQC returns an index value */
|
||||
};
|
||||
|
||||
struct acpi_video_device_brightness {
|
||||
int curr;
|
||||
int count;
|
||||
int *levels;
|
||||
struct acpi_video_brightness_flags flags;
|
||||
};
|
||||
|
||||
struct acpi_video_device {
|
||||
unsigned long device_id;
|
||||
struct acpi_video_device_flags flags;
|
||||
@ -325,7 +312,7 @@ static const struct thermal_cooling_device_ops video_cooling_ops = {
|
||||
*/
|
||||
|
||||
static int
|
||||
acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
|
||||
acpi_video_device_lcd_query_levels(acpi_handle handle,
|
||||
union acpi_object **levels)
|
||||
{
|
||||
int status;
|
||||
@ -335,7 +322,7 @@ acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
|
||||
|
||||
*levels = NULL;
|
||||
|
||||
status = acpi_evaluate_object(device->dev->handle, "_BCL", NULL, &buffer);
|
||||
status = acpi_evaluate_object(handle, "_BCL", NULL, &buffer);
|
||||
if (!ACPI_SUCCESS(status))
|
||||
return status;
|
||||
obj = (union acpi_object *)buffer.pointer;
|
||||
@ -766,36 +753,28 @@ static int acpi_video_bqc_quirk(struct acpi_video_device *device,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Arg:
|
||||
* device : video output device (LCD, CRT, ..)
|
||||
*
|
||||
* Return Value:
|
||||
* Maximum brightness level
|
||||
*
|
||||
* Allocate and initialize device->brightness.
|
||||
*/
|
||||
|
||||
static int
|
||||
acpi_video_init_brightness(struct acpi_video_device *device)
|
||||
int acpi_video_get_levels(struct acpi_device *device,
|
||||
struct acpi_video_device_brightness **dev_br)
|
||||
{
|
||||
union acpi_object *obj = NULL;
|
||||
int i, max_level = 0, count = 0, level_ac_battery = 0;
|
||||
unsigned long long level, level_old;
|
||||
union acpi_object *o;
|
||||
struct acpi_video_device_brightness *br = NULL;
|
||||
int result = -EINVAL;
|
||||
int result = 0;
|
||||
u32 value;
|
||||
|
||||
if (!ACPI_SUCCESS(acpi_video_device_lcd_query_levels(device, &obj))) {
|
||||
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"));
|
||||
result = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (obj->package.count < 2)
|
||||
if (obj->package.count < 2) {
|
||||
result = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
br = kzalloc(sizeof(*br), GFP_KERNEL);
|
||||
if (!br) {
|
||||
@ -861,6 +840,38 @@ acpi_video_init_brightness(struct acpi_video_device *device)
|
||||
"Found unordered _BCL package"));
|
||||
|
||||
br->count = count;
|
||||
*dev_br = br;
|
||||
|
||||
out:
|
||||
kfree(obj);
|
||||
return result;
|
||||
out_free:
|
||||
kfree(br);
|
||||
goto out;
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_video_get_levels);
|
||||
|
||||
/*
|
||||
* Arg:
|
||||
* device : video output device (LCD, CRT, ..)
|
||||
*
|
||||
* Return Value:
|
||||
* Maximum brightness level
|
||||
*
|
||||
* Allocate and initialize device->brightness.
|
||||
*/
|
||||
|
||||
static int
|
||||
acpi_video_init_brightness(struct acpi_video_device *device)
|
||||
{
|
||||
int i, max_level = 0;
|
||||
unsigned long long level, level_old;
|
||||
struct acpi_video_device_brightness *br = NULL;
|
||||
int result = -EINVAL;
|
||||
|
||||
result = acpi_video_get_levels(device->dev, &br);
|
||||
if (result)
|
||||
return result;
|
||||
device->brightness = br;
|
||||
|
||||
/* _BQC uses INDEX while _BCL uses VALUE in some laptops */
|
||||
@ -903,17 +914,13 @@ set_level:
|
||||
goto out_free_levels;
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"found %d brightness levels\n", count - 2));
|
||||
kfree(obj);
|
||||
return result;
|
||||
"found %d brightness levels\n", br->count - 2));
|
||||
return 0;
|
||||
|
||||
out_free_levels:
|
||||
kfree(br->levels);
|
||||
out_free:
|
||||
kfree(br);
|
||||
out:
|
||||
device->brightness = NULL;
|
||||
kfree(obj);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,7 @@ acpi-y += \
|
||||
evxfregn.o
|
||||
|
||||
acpi-y += \
|
||||
exconcat.o \
|
||||
exconfig.o \
|
||||
exconvrt.o \
|
||||
excreate.o \
|
||||
@ -149,6 +150,7 @@ acpi-y += \
|
||||
acpi-y += \
|
||||
utaddress.o \
|
||||
utalloc.o \
|
||||
utascii.o \
|
||||
utbuffer.o \
|
||||
utcopy.o \
|
||||
utexcep.o \
|
||||
|
@ -53,7 +53,7 @@
|
||||
#define ACPI_DEBUG_BUFFER_SIZE 0x4000 /* 16K buffer for return objects */
|
||||
|
||||
struct acpi_db_command_info {
|
||||
char *name; /* Command Name */
|
||||
const char *name; /* Command Name */
|
||||
u8 min_args; /* Minimum arguments required */
|
||||
};
|
||||
|
||||
@ -64,7 +64,7 @@ struct acpi_db_command_help {
|
||||
};
|
||||
|
||||
struct acpi_db_argument_info {
|
||||
char *name; /* Argument Name */
|
||||
const char *name; /* Argument Name */
|
||||
};
|
||||
|
||||
struct acpi_db_execute_walk {
|
||||
@ -196,7 +196,7 @@ ACPI_DBR_DEPENDENT_RETURN_VOID(void
|
||||
acpi_walk_state
|
||||
*walk_state))
|
||||
|
||||
acpi_status acpi_db_display_all_methods(char *display_count_arg);
|
||||
acpi_status acpi_db_display_all_methods(char *display_count_arg);
|
||||
|
||||
void acpi_db_display_arguments(void);
|
||||
|
||||
@ -220,7 +220,7 @@ ACPI_DBR_DEPENDENT_RETURN_VOID(void
|
||||
* dbexec - debugger control method execution
|
||||
*/
|
||||
void
|
||||
acpi_db_execute(char *name, char **args, acpi_object_type * types, u32 flags);
|
||||
acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags);
|
||||
|
||||
void
|
||||
acpi_db_create_execution_threads(char *num_threads_arg,
|
||||
@ -271,7 +271,7 @@ void ACPI_SYSTEM_XFACE acpi_db_execute_thread(void *context);
|
||||
acpi_status acpi_db_user_commands(void);
|
||||
|
||||
char *acpi_db_get_next_token(char *string,
|
||||
char **next, acpi_object_type * return_type);
|
||||
char **next, acpi_object_type *return_type);
|
||||
|
||||
/*
|
||||
* dbobject
|
||||
|
@ -72,6 +72,7 @@ acpi_status acpi_ev_init_global_lock_handler(void);
|
||||
ACPI_HW_DEPENDENT_RETURN_OK(acpi_status
|
||||
acpi_ev_acquire_global_lock(u16 timeout))
|
||||
ACPI_HW_DEPENDENT_RETURN_OK(acpi_status acpi_ev_release_global_lock(void))
|
||||
|
||||
acpi_status acpi_ev_remove_global_lock_handler(void);
|
||||
|
||||
/*
|
||||
@ -198,8 +199,6 @@ void
|
||||
acpi_ev_detach_region(union acpi_operand_object *region_obj,
|
||||
u8 acpi_ns_is_locked);
|
||||
|
||||
void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj);
|
||||
|
||||
void
|
||||
acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
|
||||
acpi_adr_space_type space_id, u32 function);
|
||||
|
@ -187,6 +187,8 @@ extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
|
||||
extern const char *acpi_gbl_lowest_dstate_names[ACPI_NUM_sx_w_METHODS];
|
||||
extern const char *acpi_gbl_highest_dstate_names[ACPI_NUM_sx_d_METHODS];
|
||||
extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
|
||||
extern const char acpi_gbl_lower_hex_digits[];
|
||||
extern const char acpi_gbl_upper_hex_digits[];
|
||||
extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
|
||||
|
||||
#ifdef ACPI_DBG_TRACK_ALLOCATIONS
|
||||
@ -361,6 +363,15 @@ ACPI_GLOBAL(u32, acpi_gbl_num_objects);
|
||||
|
||||
#endif /* ACPI_DEBUGGER */
|
||||
|
||||
#if defined (ACPI_DISASSEMBLER) || defined (ACPI_ASL_COMPILER)
|
||||
|
||||
ACPI_GLOBAL(const char, *acpi_gbl_pld_panel_list[]);
|
||||
ACPI_GLOBAL(const char, *acpi_gbl_pld_vertical_position_list[]);
|
||||
ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]);
|
||||
ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]);
|
||||
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Application globals
|
||||
|
@ -67,7 +67,7 @@
|
||||
typedef const struct acpi_exdump_info {
|
||||
u8 opcode;
|
||||
u8 offset;
|
||||
char *name;
|
||||
const char *name;
|
||||
|
||||
} acpi_exdump_info;
|
||||
|
||||
@ -370,7 +370,7 @@ acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
|
||||
acpi_status
|
||||
acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *operand,
|
||||
acpi_object_type * return_type,
|
||||
acpi_object_type *return_type,
|
||||
union acpi_operand_object **return_desc);
|
||||
|
||||
/*
|
||||
|
@ -278,7 +278,7 @@ struct acpi_create_field_info {
|
||||
};
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_internal_method) (struct acpi_walk_state * walk_state);
|
||||
acpi_status (*acpi_internal_method) (struct acpi_walk_state * walk_state);
|
||||
|
||||
/*
|
||||
* Bitmapped ACPI types. Used internally only
|
||||
@ -395,11 +395,12 @@ union acpi_predefined_info {
|
||||
|
||||
/* Return object auto-repair info */
|
||||
|
||||
typedef acpi_status(*acpi_object_converter) (struct acpi_namespace_node * scope,
|
||||
union acpi_operand_object
|
||||
*original_object,
|
||||
union acpi_operand_object
|
||||
**converted_object);
|
||||
typedef acpi_status (*acpi_object_converter) (struct acpi_namespace_node *
|
||||
scope,
|
||||
union acpi_operand_object *
|
||||
original_object,
|
||||
union acpi_operand_object **
|
||||
converted_object);
|
||||
|
||||
struct acpi_simple_repair_info {
|
||||
char name[ACPI_NAME_SIZE];
|
||||
@ -539,10 +540,10 @@ struct acpi_gpe_device_info {
|
||||
struct acpi_namespace_node *gpe_device;
|
||||
};
|
||||
|
||||
typedef acpi_status(*acpi_gpe_callback) (struct acpi_gpe_xrupt_info *
|
||||
gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info *gpe_block,
|
||||
void *context);
|
||||
typedef acpi_status (*acpi_gpe_callback) (struct acpi_gpe_xrupt_info *
|
||||
gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info *
|
||||
gpe_block, void *context);
|
||||
|
||||
/* Information about each particular fixed event */
|
||||
|
||||
@ -657,10 +658,11 @@ struct acpi_result_values {
|
||||
};
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_parse_downwards) (struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object ** out_op);
|
||||
acpi_status (*acpi_parse_downwards) (struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object ** out_op);
|
||||
|
||||
typedef acpi_status(*acpi_parse_upwards) (struct acpi_walk_state * walk_state);
|
||||
typedef
|
||||
acpi_status (*acpi_parse_upwards) (struct acpi_walk_state * walk_state);
|
||||
|
||||
/* Global handlers for AML Notifies */
|
||||
|
||||
@ -700,7 +702,8 @@ union acpi_generic_state {
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
typedef acpi_status(*acpi_execute_op) (struct acpi_walk_state * walk_state);
|
||||
typedef
|
||||
acpi_status (*acpi_execute_op) (struct acpi_walk_state * walk_state);
|
||||
|
||||
/* Address Range info block */
|
||||
|
||||
@ -853,24 +856,24 @@ struct acpi_parse_state {
|
||||
|
||||
/* Parse object flags */
|
||||
|
||||
#define ACPI_PARSEOP_GENERIC 0x01
|
||||
#define ACPI_PARSEOP_NAMED 0x02
|
||||
#define ACPI_PARSEOP_DEFERRED 0x04
|
||||
#define ACPI_PARSEOP_BYTELIST 0x08
|
||||
#define ACPI_PARSEOP_IN_STACK 0x10
|
||||
#define ACPI_PARSEOP_TARGET 0x20
|
||||
#define ACPI_PARSEOP_IN_CACHE 0x80
|
||||
#define ACPI_PARSEOP_GENERIC 0x01
|
||||
#define ACPI_PARSEOP_NAMED_OBJECT 0x02
|
||||
#define ACPI_PARSEOP_DEFERRED 0x04
|
||||
#define ACPI_PARSEOP_BYTELIST 0x08
|
||||
#define ACPI_PARSEOP_IN_STACK 0x10
|
||||
#define ACPI_PARSEOP_TARGET 0x20
|
||||
#define ACPI_PARSEOP_IN_CACHE 0x80
|
||||
|
||||
/* Parse object disasm_flags */
|
||||
|
||||
#define ACPI_PARSEOP_IGNORE 0x01
|
||||
#define ACPI_PARSEOP_PARAMLIST 0x02
|
||||
#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
|
||||
#define ACPI_PARSEOP_PREDEF_CHECKED 0x08
|
||||
#define ACPI_PARSEOP_CLOSING_PAREN 0x10
|
||||
#define ACPI_PARSEOP_COMPOUND 0x20
|
||||
#define ACPI_PARSEOP_ASSIGNMENT 0x40
|
||||
#define ACPI_PARSEOP_ELSEIF 0x80
|
||||
#define ACPI_PARSEOP_IGNORE 0x01
|
||||
#define ACPI_PARSEOP_PARAMETER_LIST 0x02
|
||||
#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
|
||||
#define ACPI_PARSEOP_PREDEFINED_CHECKED 0x08
|
||||
#define ACPI_PARSEOP_CLOSING_PAREN 0x10
|
||||
#define ACPI_PARSEOP_COMPOUND_ASSIGNMENT 0x20
|
||||
#define ACPI_PARSEOP_ASSIGNMENT 0x40
|
||||
#define ACPI_PARSEOP_ELSEIF 0x80
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
@ -1096,6 +1099,7 @@ struct acpi_external_list {
|
||||
#define ACPI_EXT_ORIGIN_FROM_FILE 0x02 /* External came from a file */
|
||||
#define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */
|
||||
#define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */
|
||||
#define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */
|
||||
|
||||
struct acpi_external_file {
|
||||
char *path;
|
||||
|
@ -260,14 +260,31 @@
|
||||
|
||||
#define ACPI_IS_MISALIGNED(value) (((acpi_size) value) & (sizeof(acpi_size)-1))
|
||||
|
||||
/* Generic (power-of-two) rounding */
|
||||
|
||||
#define ACPI_IS_ALIGNED(a, s) (((a) & ((s) - 1)) == 0)
|
||||
#define ACPI_IS_POWER_OF_TWO(a) ACPI_IS_ALIGNED(a, a)
|
||||
|
||||
/*
|
||||
* Bitmask creation
|
||||
* Bit positions start at zero.
|
||||
* MASK_BITS_ABOVE creates a mask starting AT the position and above
|
||||
* MASK_BITS_BELOW creates a mask starting one bit BELOW the position
|
||||
* MASK_BITS_ABOVE/BELOW accpets a bit offset to create a mask
|
||||
* MASK_BITS_ABOVE/BELOW_32/64 accpets a bit width to create a mask
|
||||
* Note: The ACPI_INTEGER_BIT_SIZE check is used to bypass compiler
|
||||
* differences with the shift operator
|
||||
*/
|
||||
#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_UINT64_MAX) << ((u32) (position))))
|
||||
#define ACPI_MASK_BITS_BELOW(position) ((ACPI_UINT64_MAX) << ((u32) (position)))
|
||||
#define ACPI_MASK_BITS_ABOVE_32(width) ((u32) ACPI_MASK_BITS_ABOVE(width))
|
||||
#define ACPI_MASK_BITS_BELOW_32(width) ((u32) ACPI_MASK_BITS_BELOW(width))
|
||||
#define ACPI_MASK_BITS_ABOVE_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \
|
||||
ACPI_UINT64_MAX : \
|
||||
ACPI_MASK_BITS_ABOVE(width))
|
||||
#define ACPI_MASK_BITS_BELOW_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \
|
||||
(u64) 0 : \
|
||||
ACPI_MASK_BITS_BELOW(width))
|
||||
|
||||
/* Bitfields within ACPI registers */
|
||||
|
||||
@ -283,10 +300,10 @@
|
||||
/* Generic bitfield macros and masks */
|
||||
|
||||
#define ACPI_GET_BITS(source_ptr, position, mask) \
|
||||
((*source_ptr >> position) & mask)
|
||||
((*(source_ptr) >> (position)) & (mask))
|
||||
|
||||
#define ACPI_SET_BITS(target_ptr, position, mask, value) \
|
||||
(*target_ptr |= ((value & mask) << position))
|
||||
(*(target_ptr) |= (((value) & (mask)) << (position)))
|
||||
|
||||
#define ACPI_1BIT_MASK 0x00000001
|
||||
#define ACPI_2BIT_MASK 0x00000003
|
||||
|
@ -206,9 +206,10 @@ void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth);
|
||||
void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level);
|
||||
|
||||
void
|
||||
acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component);
|
||||
acpi_ns_dump_pathname(acpi_handle handle,
|
||||
const char *msg, u32 level, u32 component);
|
||||
|
||||
void acpi_ns_print_pathname(u32 num_segments, char *pathname);
|
||||
void acpi_ns_print_pathname(u32 num_segments, const char *pathname);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_dump_one_object(acpi_handle obj_handle,
|
||||
|
@ -139,7 +139,7 @@ acpi_ps_complete_final_op(struct acpi_walk_state *walk_state,
|
||||
*/
|
||||
const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode);
|
||||
|
||||
char *acpi_ps_get_opcode_name(u16 opcode);
|
||||
const char *acpi_ps_get_opcode_name(u16 opcode);
|
||||
|
||||
u8 acpi_ps_get_argument_count(u32 op_type);
|
||||
|
||||
|
@ -129,7 +129,8 @@ enum acpi_return_package_types {
|
||||
ACPI_PTYPE2_REV_FIXED = 9,
|
||||
ACPI_PTYPE2_FIX_VAR = 10,
|
||||
ACPI_PTYPE2_VAR_VAR = 11,
|
||||
ACPI_PTYPE2_UUID_PAIR = 12
|
||||
ACPI_PTYPE2_UUID_PAIR = 12,
|
||||
ACPI_PTYPE_CUSTOM = 13
|
||||
};
|
||||
|
||||
/* Support macros for users of the predefined info table */
|
||||
@ -340,7 +341,7 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
|
||||
|
||||
{{"_BIX", METHOD_0ARGS,
|
||||
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (16 Int),(4 Str) */
|
||||
PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 16,
|
||||
PACKAGE_INFO(ACPI_PTYPE_CUSTOM, ACPI_RTYPE_INTEGER, 16,
|
||||
ACPI_RTYPE_STRING, 4, 0),
|
||||
|
||||
{{"_BLT",
|
||||
@ -523,6 +524,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
|
||||
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Fixed-length (4 Int) */
|
||||
PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 4, 0, 0, 0),
|
||||
|
||||
{{"_FIT", METHOD_0ARGS,
|
||||
METHOD_RETURNS(ACPI_RTYPE_BUFFER)}}, /* ACPI 6.0 */
|
||||
|
||||
{{"_FIX", METHOD_0ARGS,
|
||||
METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Ints) */
|
||||
PACKAGE_INFO(ACPI_PTYPE1_VAR, ACPI_RTYPE_INTEGER, 0, 0, 0, 0),
|
||||
@ -1053,6 +1057,12 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {
|
||||
METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
|
||||
ACPI_RTYPE_BUFFER)}},
|
||||
|
||||
{{"_WPC", METHOD_0ARGS,
|
||||
METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* ACPI 6.1 */
|
||||
|
||||
{{"_WPP", METHOD_0ARGS,
|
||||
METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, /* ACPI 6.1 */
|
||||
|
||||
PACKAGE_INFO(0, 0, 0, 0, 0, 0) /* Table terminator */
|
||||
};
|
||||
#else
|
||||
|
@ -124,7 +124,7 @@ typedef enum {
|
||||
typedef const struct acpi_rsdump_info {
|
||||
u8 opcode;
|
||||
u8 offset;
|
||||
char *name;
|
||||
const char *name;
|
||||
const char **pointer;
|
||||
|
||||
} acpi_rsdump_info;
|
||||
@ -209,7 +209,7 @@ acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_method_data(acpi_handle handle,
|
||||
char *path, struct acpi_buffer *ret_buffer);
|
||||
const char *path, struct acpi_buffer *ret_buffer);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
|
||||
@ -223,16 +223,16 @@ acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
|
||||
* rscalc
|
||||
*/
|
||||
acpi_status
|
||||
acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
u32 aml_buffer_length, acpi_size * size_needed);
|
||||
acpi_rs_get_list_length(u8 *aml_buffer,
|
||||
u32 aml_buffer_length, acpi_size *size_needed);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_aml_length(struct acpi_resource *resource_list,
|
||||
acpi_size resource_list_size, acpi_size * size_needed);
|
||||
acpi_size resource_list_size, acpi_size *size_needed);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
|
||||
acpi_size * buffer_size_needed);
|
||||
acpi_size *buffer_size_needed);
|
||||
|
||||
acpi_status
|
||||
acpi_rs_convert_aml_to_resources(u8 * aml,
|
||||
|
@ -184,7 +184,7 @@ struct acpi_evaluate_info {
|
||||
/* The first 3 elements are passed by the caller to acpi_ns_evaluate */
|
||||
|
||||
struct acpi_namespace_node *prefix_node; /* Input: starting node */
|
||||
char *relative_pathname; /* Input: path relative to prefix_node */
|
||||
const char *relative_pathname; /* Input: path relative to prefix_node */
|
||||
union acpi_operand_object **parameters; /* Input: argument list */
|
||||
|
||||
struct acpi_namespace_node *node; /* Resolved node (prefix_node:relative_pathname) */
|
||||
|
@ -161,8 +161,6 @@ acpi_tb_install_fixed_table(acpi_physical_address address,
|
||||
|
||||
acpi_status acpi_tb_parse_root_table(acpi_physical_address rsdp_address);
|
||||
|
||||
u8 acpi_is_valid_signature(char *signature);
|
||||
|
||||
/*
|
||||
* tbxfload
|
||||
*/
|
||||
|
@ -136,16 +136,16 @@ extern const char *acpi_gbl_pt_decode[];
|
||||
#define ACPI_SMALL_VARIABLE_LENGTH 3
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_walk_aml_callback) (u8 *aml,
|
||||
u32 length,
|
||||
u32 offset,
|
||||
u8 resource_index, void **context);
|
||||
acpi_status (*acpi_walk_aml_callback) (u8 *aml,
|
||||
u32 length,
|
||||
u32 offset,
|
||||
u8 resource_index, void **context);
|
||||
|
||||
typedef
|
||||
acpi_status(*acpi_pkg_callback) (u8 object_type,
|
||||
union acpi_operand_object *source_object,
|
||||
union acpi_generic_state * state,
|
||||
void *context);
|
||||
acpi_status (*acpi_pkg_callback) (u8 object_type,
|
||||
union acpi_operand_object * source_object,
|
||||
union acpi_generic_state * state,
|
||||
void *context);
|
||||
|
||||
struct acpi_pkg_info {
|
||||
u8 *free_space;
|
||||
@ -166,6 +166,15 @@ struct acpi_pkg_info {
|
||||
#define DB_DWORD_DISPLAY 4
|
||||
#define DB_QWORD_DISPLAY 8
|
||||
|
||||
/*
|
||||
* utascii - ASCII utilities
|
||||
*/
|
||||
u8 acpi_ut_valid_nameseg(char *signature);
|
||||
|
||||
u8 acpi_ut_valid_name_char(char character, u32 position);
|
||||
|
||||
void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count);
|
||||
|
||||
/*
|
||||
* utnonansi - Non-ANSI C library functions
|
||||
*/
|
||||
@ -175,7 +184,14 @@ void acpi_ut_strlwr(char *src_string);
|
||||
|
||||
int acpi_ut_stricmp(char *string1, char *string2);
|
||||
|
||||
acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer);
|
||||
acpi_status
|
||||
acpi_ut_strtoul64(char *string,
|
||||
u32 base, u32 max_integer_byte_width, u64 *ret_integer);
|
||||
|
||||
/* Values for max_integer_byte_width above */
|
||||
|
||||
#define ACPI_MAX32_BYTE_WIDTH 4
|
||||
#define ACPI_MAX64_BYTE_WIDTH 8
|
||||
|
||||
/*
|
||||
* utglobal - Global data structures and procedures
|
||||
@ -266,7 +282,8 @@ acpi_ut_trace(u32 line_number,
|
||||
void
|
||||
acpi_ut_trace_ptr(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id, void *pointer);
|
||||
const char *module_name,
|
||||
u32 component_id, const void *pointer);
|
||||
|
||||
void
|
||||
acpi_ut_trace_u32(u32 line_number,
|
||||
@ -276,7 +293,8 @@ acpi_ut_trace_u32(u32 line_number,
|
||||
void
|
||||
acpi_ut_trace_str(u32 line_number,
|
||||
const char *function_name,
|
||||
const char *module_name, u32 component_id, char *string);
|
||||
const char *module_name,
|
||||
u32 component_id, const char *string);
|
||||
|
||||
void
|
||||
acpi_ut_exit(u32 line_number,
|
||||
@ -335,12 +353,12 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);
|
||||
*/
|
||||
acpi_status
|
||||
acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
|
||||
char *path,
|
||||
const char *path,
|
||||
u32 expected_return_btypes,
|
||||
union acpi_operand_object **return_desc);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_evaluate_numeric_object(char *object_name,
|
||||
acpi_ut_evaluate_numeric_object(const char *object_name,
|
||||
struct acpi_namespace_node *device_node,
|
||||
u64 *value);
|
||||
|
||||
@ -415,7 +433,7 @@ union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size);
|
||||
union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);
|
||||
acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size *obj_length);
|
||||
|
||||
/*
|
||||
* utosi - Support for the _OSI predefined control method
|
||||
@ -526,15 +544,15 @@ void acpi_ut_set_integer_width(u8 revision);
|
||||
void
|
||||
acpi_ut_display_init_pathname(u8 type,
|
||||
struct acpi_namespace_node *obj_handle,
|
||||
char *path);
|
||||
const char *path);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* utownerid - Support for Table/Method Owner IDs
|
||||
*/
|
||||
acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id);
|
||||
acpi_status acpi_ut_allocate_owner_id(acpi_owner_id *owner_id);
|
||||
|
||||
void acpi_ut_release_owner_id(acpi_owner_id * owner_id);
|
||||
void acpi_ut_release_owner_id(acpi_owner_id *owner_id);
|
||||
|
||||
/*
|
||||
* utresrc
|
||||
@ -570,10 +588,6 @@ void acpi_ut_print_string(char *string, u16 max_length);
|
||||
void ut_convert_backslashes(char *pathname);
|
||||
#endif
|
||||
|
||||
u8 acpi_ut_valid_acpi_name(char *name);
|
||||
|
||||
u8 acpi_ut_valid_acpi_char(char character, u32 position);
|
||||
|
||||
void acpi_ut_repair_name(char *name);
|
||||
|
||||
#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
|
||||
@ -628,7 +642,7 @@ void acpi_ut_dump_allocation_info(void);
|
||||
void acpi_ut_dump_allocations(u32 component, const char *module);
|
||||
|
||||
acpi_status
|
||||
acpi_ut_create_list(char *list_name,
|
||||
acpi_ut_create_list(const char *list_name,
|
||||
u16 object_size, struct acpi_memory_list **return_cache);
|
||||
|
||||
#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
|
||||
|
@ -738,9 +738,9 @@ acpi_dm_test_resource_conversion(struct acpi_namespace_node *node, char *name)
|
||||
original_aml = return_buffer.pointer;
|
||||
|
||||
acpi_dm_compare_aml_resources(original_aml->buffer.pointer,
|
||||
(acpi_rsdesc_size) original_aml->buffer.
|
||||
(acpi_rsdesc_size)original_aml->buffer.
|
||||
length, new_aml.pointer,
|
||||
(acpi_rsdesc_size) new_aml.length);
|
||||
(acpi_rsdesc_size)new_aml.length);
|
||||
|
||||
/* Cleanup and exit */
|
||||
|
||||
|
@ -194,7 +194,7 @@ acpi_db_convert_to_buffer(char *string, union acpi_object *object)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_db_convert_to_package(char *string, union acpi_object * object)
|
||||
acpi_status acpi_db_convert_to_package(char *string, union acpi_object *object)
|
||||
{
|
||||
char *this;
|
||||
char *next;
|
||||
@ -252,7 +252,7 @@ acpi_status acpi_db_convert_to_package(char *string, union acpi_object * object)
|
||||
|
||||
acpi_status
|
||||
acpi_db_convert_to_object(acpi_object_type type,
|
||||
char *string, union acpi_object * object)
|
||||
char *string, union acpi_object *object)
|
||||
{
|
||||
acpi_status status = AE_OK;
|
||||
|
||||
@ -277,7 +277,9 @@ acpi_db_convert_to_object(acpi_object_type type,
|
||||
default:
|
||||
|
||||
object->type = ACPI_TYPE_INTEGER;
|
||||
status = acpi_ut_strtoul64(string, 16, &object->integer.value);
|
||||
status =
|
||||
acpi_ut_strtoul64(string, 16, acpi_gbl_integer_byte_width,
|
||||
&object->integer.value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -361,7 +361,7 @@ acpi_db_execution_walk(acpi_handle obj_handle,
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
acpi_db_execute(char *name, char **args, acpi_object_type * types, u32 flags)
|
||||
acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_buffer return_obj;
|
||||
|
@ -57,12 +57,12 @@ static u32 acpi_db_get_line(char *input_buffer);
|
||||
|
||||
static u32 acpi_db_match_command(char *user_command);
|
||||
|
||||
static void acpi_db_display_command_info(char *command, u8 display_all);
|
||||
static void acpi_db_display_command_info(const char *command, u8 display_all);
|
||||
|
||||
static void acpi_db_display_help(char *command);
|
||||
|
||||
static u8
|
||||
acpi_db_match_command_help(char *command,
|
||||
acpi_db_match_command_help(const char *command,
|
||||
const struct acpi_db_command_help *help);
|
||||
|
||||
/*
|
||||
@ -348,7 +348,7 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = {
|
||||
******************************************************************************/
|
||||
|
||||
static u8
|
||||
acpi_db_match_command_help(char *command,
|
||||
acpi_db_match_command_help(const char *command,
|
||||
const struct acpi_db_command_help *help)
|
||||
{
|
||||
char *invocation = help->invocation;
|
||||
@ -402,7 +402,7 @@ acpi_db_match_command_help(char *command,
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void acpi_db_display_command_info(char *command, u8 display_all)
|
||||
static void acpi_db_display_command_info(const char *command, u8 display_all)
|
||||
{
|
||||
const struct acpi_db_command_help *next;
|
||||
u8 matched;
|
||||
@ -466,7 +466,7 @@ static void acpi_db_display_help(char *command)
|
||||
******************************************************************************/
|
||||
|
||||
char *acpi_db_get_next_token(char *string,
|
||||
char **next, acpi_object_type * return_type)
|
||||
char **next, acpi_object_type *return_type)
|
||||
{
|
||||
char *start;
|
||||
u32 depth;
|
||||
@ -656,8 +656,9 @@ static u32 acpi_db_match_command(char *user_command)
|
||||
}
|
||||
|
||||
for (i = CMD_FIRST_VALID; acpi_gbl_db_commands[i].name; i++) {
|
||||
if (strstr(acpi_gbl_db_commands[i].name, user_command) ==
|
||||
acpi_gbl_db_commands[i].name) {
|
||||
if (strstr
|
||||
(ACPI_CAST_PTR(char, acpi_gbl_db_commands[i].name),
|
||||
user_command) == acpi_gbl_db_commands[i].name) {
|
||||
return (i);
|
||||
}
|
||||
}
|
||||
@ -683,8 +684,8 @@ static u32 acpi_db_match_command(char *user_command)
|
||||
|
||||
acpi_status
|
||||
acpi_db_command_dispatch(char *input_buffer,
|
||||
struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object * op)
|
||||
struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op)
|
||||
{
|
||||
u32 temp;
|
||||
u32 command_index;
|
||||
|
@ -285,7 +285,7 @@ void acpi_db_dump_namespace_by_owner(char *owner_arg, char *depth_arg)
|
||||
u32 max_depth = ACPI_UINT32_MAX;
|
||||
acpi_owner_id owner_id;
|
||||
|
||||
owner_id = (acpi_owner_id) strtoul(owner_arg, NULL, 0);
|
||||
owner_id = (acpi_owner_id)strtoul(owner_arg, NULL, 0);
|
||||
|
||||
/* Now we can check for the depth argument */
|
||||
|
||||
@ -709,7 +709,7 @@ acpi_db_integrity_walk(acpi_handle obj_handle,
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
if (!acpi_ut_valid_acpi_name(node->name.ascii)) {
|
||||
if (!acpi_ut_valid_nameseg(node->name.ascii)) {
|
||||
acpi_os_printf("Invalid AcpiName for Node %p\n", node);
|
||||
return (AE_OK);
|
||||
}
|
||||
|
@ -56,8 +56,6 @@ acpi_status acpi_db_second_pass_parse(union acpi_parse_object *root);
|
||||
void acpi_db_dump_buffer(u32 address);
|
||||
#endif
|
||||
|
||||
static char *gbl_hex_to_ascii = "0123456789ABCDEF";
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_db_match_argument
|
||||
@ -82,8 +80,9 @@ acpi_db_match_argument(char *user_argument,
|
||||
}
|
||||
|
||||
for (i = 0; arguments[i].name; i++) {
|
||||
if (strstr(arguments[i].name, user_argument) ==
|
||||
arguments[i].name) {
|
||||
if (strstr(ACPI_CAST_PTR(char, arguments[i].name),
|
||||
ACPI_CAST_PTR(char,
|
||||
user_argument)) == arguments[i].name) {
|
||||
return (i);
|
||||
}
|
||||
}
|
||||
@ -339,7 +338,7 @@ void acpi_db_uint32_to_hex_string(u32 value, char *buffer)
|
||||
buffer[8] = '\0';
|
||||
|
||||
for (i = 7; i >= 0; i--) {
|
||||
buffer[i] = gbl_hex_to_ascii[value & 0x0F];
|
||||
buffer[i] = acpi_gbl_upper_hex_digits[value & 0x0F];
|
||||
value = value >> 4;
|
||||
}
|
||||
}
|
||||
|
@ -162,8 +162,8 @@ void acpi_db_signal_break_point(struct acpi_walk_state *walk_state)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_db_single_step(struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object * op, u32 opcode_class)
|
||||
acpi_db_single_step(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op, u32 opcode_class)
|
||||
{
|
||||
union acpi_parse_object *next;
|
||||
acpi_status status = AE_OK;
|
||||
|
@ -163,8 +163,8 @@ acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object * op)
|
||||
acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op)
|
||||
{
|
||||
acpi_status status = AE_OK;
|
||||
union acpi_generic_state *control_state;
|
||||
|
@ -188,7 +188,7 @@ acpi_ds_init_one_object(acpi_handle obj_handle,
|
||||
|
||||
acpi_status
|
||||
acpi_ds_initialize_objects(u32 table_index,
|
||||
struct acpi_namespace_node * start_node)
|
||||
struct acpi_namespace_node *start_node)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_init_walk_info info;
|
||||
|
@ -209,7 +209,7 @@ acpi_ds_detect_named_opcodes(struct acpi_walk_state *walk_state,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state * walk_state)
|
||||
acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
|
||||
{
|
||||
u32 aml_offset;
|
||||
|
||||
|
@ -569,7 +569,7 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
|
||||
/* TBD: May only be temporary */
|
||||
|
||||
obj_desc =
|
||||
acpi_ut_create_string_object((acpi_size) name_length);
|
||||
acpi_ut_create_string_object((acpi_size)name_length);
|
||||
|
||||
strncpy(obj_desc->string.pointer,
|
||||
name_string, name_length);
|
||||
|
@ -137,8 +137,8 @@ acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object ** out_op)
|
||||
acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object **out_op)
|
||||
{
|
||||
union acpi_parse_object *op;
|
||||
struct acpi_namespace_node *node;
|
||||
|
@ -490,8 +490,8 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
|
||||
|
||||
status =
|
||||
acpi_ds_create_index_field(op,
|
||||
(acpi_handle) arg->
|
||||
common.node, walk_state);
|
||||
(acpi_handle)arg->common.
|
||||
node, walk_state);
|
||||
break;
|
||||
|
||||
case AML_BANK_FIELD_OP:
|
||||
|
@ -143,8 +143,8 @@ acpi_ds_result_pop(union acpi_operand_object **object,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_result_push(union acpi_operand_object * object,
|
||||
struct acpi_walk_state * walk_state)
|
||||
acpi_ds_result_push(union acpi_operand_object *object,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
union acpi_generic_state *state;
|
||||
acpi_status status;
|
||||
@ -307,7 +307,7 @@ static acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state *walk_state)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state)
|
||||
acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state)
|
||||
{
|
||||
ACPI_FUNCTION_NAME(ds_obj_stack_push);
|
||||
|
||||
@ -354,7 +354,7 @@ acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state * walk_state)
|
||||
acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
@ -411,7 +411,7 @@ acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = (s32) pop_count - 1; i >= 0; i--) {
|
||||
for (i = (s32)pop_count - 1; i >= 0; i--) {
|
||||
if (walk_state->num_operands == 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -440,7 +440,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list)
|
||||
|
||||
gpe_event_info =
|
||||
&gpe_block->
|
||||
event_info[((acpi_size) i *
|
||||
event_info[((acpi_size)i *
|
||||
ACPI_GPE_REGISTER_WIDTH) + j];
|
||||
gpe_number =
|
||||
j + gpe_register_info->base_gpe_number;
|
||||
@ -652,7 +652,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_enable_gpe(void *context)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info * gpe_event_info)
|
||||
acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info)
|
||||
{
|
||||
acpi_status status;
|
||||
|
||||
|
@ -211,7 +211,7 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
|
||||
|
||||
/* Allocate the GPE register information block */
|
||||
|
||||
gpe_register_info = ACPI_ALLOCATE_ZEROED((acpi_size) gpe_block->
|
||||
gpe_register_info = ACPI_ALLOCATE_ZEROED((acpi_size)gpe_block->
|
||||
register_count *
|
||||
sizeof(struct
|
||||
acpi_gpe_register_info));
|
||||
@ -225,7 +225,7 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
|
||||
* Allocate the GPE event_info block. There are eight distinct GPEs
|
||||
* per register. Initialization to zeros is sufficient.
|
||||
*/
|
||||
gpe_event_info = ACPI_ALLOCATE_ZEROED((acpi_size) gpe_block->gpe_count *
|
||||
gpe_event_info = ACPI_ALLOCATE_ZEROED((acpi_size)gpe_block->gpe_count *
|
||||
sizeof(struct
|
||||
acpi_gpe_event_info));
|
||||
if (!gpe_event_info) {
|
||||
|
@ -163,7 +163,7 @@ acpi_ev_get_gpe_device(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
|
||||
acpi_status
|
||||
acpi_ev_get_gpe_xrupt_block(u32 interrupt_number,
|
||||
struct acpi_gpe_xrupt_info ** gpe_xrupt_block)
|
||||
struct acpi_gpe_xrupt_info **gpe_xrupt_block)
|
||||
{
|
||||
struct acpi_gpe_xrupt_info *next_gpe_xrupt;
|
||||
struct acpi_gpe_xrupt_info *gpe_xrupt;
|
||||
@ -320,7 +320,7 @@ acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
/* Now look at the individual GPEs in this byte register */
|
||||
|
||||
for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
|
||||
gpe_event_info = &gpe_block->event_info[((acpi_size) i *
|
||||
gpe_event_info = &gpe_block->event_info[((acpi_size)i *
|
||||
ACPI_GPE_REGISTER_WIDTH)
|
||||
+ j];
|
||||
|
||||
|
@ -359,7 +359,7 @@ union acpi_operand_object *acpi_ev_find_region_handler(acpi_adr_space_type
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ev_install_space_handler(struct acpi_namespace_node * node,
|
||||
acpi_ev_install_space_handler(struct acpi_namespace_node *node,
|
||||
acpi_adr_space_type space_id,
|
||||
acpi_adr_space_handler handler,
|
||||
acpi_adr_space_setup setup, void *context)
|
||||
|
@ -99,8 +99,7 @@ u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
|
||||
u32 notify_value)
|
||||
acpi_ev_queue_notify_request(struct acpi_namespace_node *node, u32 notify_value)
|
||||
{
|
||||
union acpi_operand_object *obj_desc;
|
||||
union acpi_operand_object *handler_list_head = NULL;
|
||||
|
@ -524,52 +524,6 @@ acpi_ev_attach_region(union acpi_operand_object *handler_obj,
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ev_associate_reg_method
|
||||
*
|
||||
* PARAMETERS: region_obj - Region object
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Find and associate _REG method to a region
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void acpi_ev_associate_reg_method(union acpi_operand_object *region_obj)
|
||||
{
|
||||
acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;
|
||||
struct acpi_namespace_node *method_node;
|
||||
struct acpi_namespace_node *node;
|
||||
union acpi_operand_object *region_obj2;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ev_associate_reg_method);
|
||||
|
||||
region_obj2 = acpi_ns_get_secondary_object(region_obj);
|
||||
if (!region_obj2) {
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
node = region_obj->region.node->parent;
|
||||
|
||||
/* Find any "_REG" method associated with this region definition */
|
||||
|
||||
status =
|
||||
acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
|
||||
&method_node);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
/*
|
||||
* The _REG method is optional and there can be only one per region
|
||||
* definition. This will be executed when the handler is attached
|
||||
* or removed
|
||||
*/
|
||||
region_obj2->extra.method_REG = method_node;
|
||||
}
|
||||
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ev_execute_reg_method
|
||||
@ -589,18 +543,42 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
|
||||
struct acpi_evaluate_info *info;
|
||||
union acpi_operand_object *args[3];
|
||||
union acpi_operand_object *region_obj2;
|
||||
const acpi_name *reg_name_ptr =
|
||||
ACPI_CAST_PTR(acpi_name, METHOD_NAME__REG);
|
||||
struct acpi_namespace_node *method_node;
|
||||
struct acpi_namespace_node *node;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ev_execute_reg_method);
|
||||
|
||||
if (!acpi_gbl_namespace_initialized ||
|
||||
region_obj->region.handler == NULL) {
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
region_obj2 = acpi_ns_get_secondary_object(region_obj);
|
||||
if (!region_obj2) {
|
||||
return_ACPI_STATUS(AE_NOT_EXIST);
|
||||
}
|
||||
|
||||
if (region_obj2->extra.method_REG == NULL ||
|
||||
region_obj->region.handler == NULL ||
|
||||
!acpi_gbl_namespace_initialized) {
|
||||
/*
|
||||
* Find any "_REG" method associated with this region definition.
|
||||
* The method should always be updated as this function may be
|
||||
* invoked after a namespace change.
|
||||
*/
|
||||
node = region_obj->region.node->parent;
|
||||
status =
|
||||
acpi_ns_search_one_scope(*reg_name_ptr, node, ACPI_TYPE_METHOD,
|
||||
&method_node);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
/*
|
||||
* The _REG method is optional and there can be only one per
|
||||
* region definition. This will be executed when the handler is
|
||||
* attached or removed.
|
||||
*/
|
||||
region_obj2->extra.method_REG = method_node;
|
||||
}
|
||||
if (region_obj2->extra.method_REG == NULL) {
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
|
@ -227,7 +227,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
|
||||
|
||||
/* Install a handler for this PCI root bridge */
|
||||
|
||||
status = acpi_install_address_space_handler((acpi_handle) pci_root_node, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL);
|
||||
status = acpi_install_address_space_handler((acpi_handle)pci_root_node, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status == AE_SAME_HANDLER) {
|
||||
/*
|
||||
@ -518,7 +518,6 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
acpi_ev_associate_reg_method(region_obj);
|
||||
region_obj->common.flags |= AOPOBJ_OBJECT_INITIALIZED;
|
||||
|
||||
node = region_obj->region.node->parent;
|
||||
|
@ -917,7 +917,7 @@ ACPI_EXPORT_SYMBOL(acpi_remove_gpe_block)
|
||||
* the FADT-defined gpe blocks. Otherwise, the GPE block device.
|
||||
*
|
||||
******************************************************************************/
|
||||
acpi_status acpi_get_gpe_device(u32 index, acpi_handle * gpe_device)
|
||||
acpi_status acpi_get_gpe_device(u32 index, acpi_handle *gpe_device)
|
||||
{
|
||||
struct acpi_gpe_device_info info;
|
||||
acpi_status status;
|
||||
|
439
drivers/acpi/acpica/exconcat.c
Normal file
439
drivers/acpi/acpica/exconcat.c
Normal file
@ -0,0 +1,439 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: exconcat - Concatenate-type AML operators
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2000 - 2016, Intel Corp.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification.
|
||||
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
|
||||
* substantially similar to the "NO WARRANTY" disclaimer below
|
||||
* ("Disclaimer") and any redistribution must be conditioned upon
|
||||
* including a substantially similar Disclaimer requirement for further
|
||||
* binary redistribution.
|
||||
* 3. Neither the names of the above-listed copyright holders nor the names
|
||||
* of any contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") version 2 as published by the Free
|
||||
* Software Foundation.
|
||||
*
|
||||
* NO WARRANTY
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGES.
|
||||
*/
|
||||
|
||||
#include <acpi/acpi.h>
|
||||
#include "accommon.h"
|
||||
#include "acinterp.h"
|
||||
#include "amlresrc.h"
|
||||
|
||||
#define _COMPONENT ACPI_EXECUTER
|
||||
ACPI_MODULE_NAME("exconcat")
|
||||
|
||||
/* Local Prototypes */
|
||||
static acpi_status
|
||||
acpi_ex_convert_to_object_type_string(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **result_desc);
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ex_do_concatenate
|
||||
*
|
||||
* PARAMETERS: operand0 - First source object
|
||||
* operand1 - Second source object
|
||||
* actual_return_desc - Where to place the return object
|
||||
* walk_state - Current walk state
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Concatenate two objects with the ACPI-defined conversion
|
||||
* rules as necessary.
|
||||
* NOTE:
|
||||
* Per the ACPI spec (up to 6.1), Concatenate only supports Integer,
|
||||
* String, and Buffer objects. However, we support all objects here
|
||||
* as an extension. This improves the usefulness of both Concatenate
|
||||
* and the Printf/Fprintf macros. The extension returns a string
|
||||
* describing the object type for the other objects.
|
||||
* 02/2016.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ex_do_concatenate(union acpi_operand_object *operand0,
|
||||
union acpi_operand_object *operand1,
|
||||
union acpi_operand_object **actual_return_desc,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
union acpi_operand_object *local_operand0 = operand0;
|
||||
union acpi_operand_object *local_operand1 = operand1;
|
||||
union acpi_operand_object *temp_operand1 = NULL;
|
||||
union acpi_operand_object *return_desc;
|
||||
char *buffer;
|
||||
acpi_object_type operand0_type;
|
||||
acpi_object_type operand1_type;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ex_do_concatenate);
|
||||
|
||||
/* Operand 0 preprocessing */
|
||||
|
||||
switch (operand0->common.type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
case ACPI_TYPE_STRING:
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
operand0_type = operand0->common.type;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* For all other types, get the "object type" string */
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_object_type_string(operand0,
|
||||
&local_operand0);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
operand0_type = ACPI_TYPE_STRING;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Operand 1 preprocessing */
|
||||
|
||||
switch (operand1->common.type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
case ACPI_TYPE_STRING:
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
operand1_type = operand1->common.type;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* For all other types, get the "object type" string */
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_object_type_string(operand1,
|
||||
&local_operand1);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
operand1_type = ACPI_TYPE_STRING;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the second operand if necessary. The first operand (0)
|
||||
* determines the type of the second operand (1) (See the Data Types
|
||||
* section of the ACPI specification). Both object types are
|
||||
* guaranteed to be either Integer/String/Buffer by the operand
|
||||
* resolution mechanism.
|
||||
*/
|
||||
switch (operand0_type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_integer(local_operand1, &temp_operand1,
|
||||
16);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_buffer(local_operand1, &temp_operand1);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_STRING:
|
||||
|
||||
switch (operand1_type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
case ACPI_TYPE_STRING:
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
/* Other types have already been converted to string */
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_string(local_operand1,
|
||||
&temp_operand1,
|
||||
ACPI_IMPLICIT_CONVERT_HEX);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
status = AE_OK;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
|
||||
operand0->common.type));
|
||||
status = AE_AML_INTERNAL;
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Take care with any newly created operand objects */
|
||||
|
||||
if ((local_operand1 != operand1) && (local_operand1 != temp_operand1)) {
|
||||
acpi_ut_remove_reference(local_operand1);
|
||||
}
|
||||
|
||||
local_operand1 = temp_operand1;
|
||||
|
||||
/*
|
||||
* Both operands are now known to be the same object type
|
||||
* (Both are Integer, String, or Buffer), and we can now perform
|
||||
* the concatenation.
|
||||
*
|
||||
* There are three cases to handle, as per the ACPI spec:
|
||||
*
|
||||
* 1) Two Integers concatenated to produce a new Buffer
|
||||
* 2) Two Strings concatenated to produce a new String
|
||||
* 3) Two Buffers concatenated to produce a new Buffer
|
||||
*/
|
||||
switch (operand0_type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
|
||||
/* Result of two Integers is a Buffer */
|
||||
/* Need enough buffer space for two integers */
|
||||
|
||||
return_desc = acpi_ut_create_buffer_object((acpi_size)
|
||||
ACPI_MUL_2
|
||||
(acpi_gbl_integer_byte_width));
|
||||
if (!return_desc) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
buffer = (char *)return_desc->buffer.pointer;
|
||||
|
||||
/* Copy the first integer, LSB first */
|
||||
|
||||
memcpy(buffer, &operand0->integer.value,
|
||||
acpi_gbl_integer_byte_width);
|
||||
|
||||
/* Copy the second integer (LSB first) after the first */
|
||||
|
||||
memcpy(buffer + acpi_gbl_integer_byte_width,
|
||||
&local_operand1->integer.value,
|
||||
acpi_gbl_integer_byte_width);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_STRING:
|
||||
|
||||
/* Result of two Strings is a String */
|
||||
|
||||
return_desc = acpi_ut_create_string_object(((acpi_size)
|
||||
local_operand0->
|
||||
string.length +
|
||||
local_operand1->
|
||||
string.length));
|
||||
if (!return_desc) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
buffer = return_desc->string.pointer;
|
||||
|
||||
/* Concatenate the strings */
|
||||
|
||||
strcpy(buffer, local_operand0->string.pointer);
|
||||
strcat(buffer, local_operand1->string.pointer);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
/* Result of two Buffers is a Buffer */
|
||||
|
||||
return_desc = acpi_ut_create_buffer_object(((acpi_size)
|
||||
operand0->buffer.
|
||||
length +
|
||||
local_operand1->
|
||||
buffer.length));
|
||||
if (!return_desc) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
buffer = (char *)return_desc->buffer.pointer;
|
||||
|
||||
/* Concatenate the buffers */
|
||||
|
||||
memcpy(buffer, operand0->buffer.pointer,
|
||||
operand0->buffer.length);
|
||||
memcpy(buffer + operand0->buffer.length,
|
||||
local_operand1->buffer.pointer,
|
||||
local_operand1->buffer.length);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* Invalid object type, should not happen here */
|
||||
|
||||
ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
|
||||
operand0->common.type));
|
||||
status = AE_AML_INTERNAL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
*actual_return_desc = return_desc;
|
||||
|
||||
cleanup:
|
||||
if (local_operand0 != operand0) {
|
||||
acpi_ut_remove_reference(local_operand0);
|
||||
}
|
||||
|
||||
if (local_operand1 != operand1) {
|
||||
acpi_ut_remove_reference(local_operand1);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ex_convert_to_object_type_string
|
||||
*
|
||||
* PARAMETERS: obj_desc - Object to be converted
|
||||
* return_desc - Where to place the return object
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert an object of arbitrary type to a string object that
|
||||
* contains the namestring for the object. Used for the
|
||||
* concatenate operator.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static acpi_status
|
||||
acpi_ex_convert_to_object_type_string(union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **result_desc)
|
||||
{
|
||||
union acpi_operand_object *return_desc;
|
||||
const char *type_string;
|
||||
|
||||
type_string = acpi_ut_get_type_name(obj_desc->common.type);
|
||||
|
||||
return_desc = acpi_ut_create_string_object(((acpi_size)strlen(type_string) + 9)); /* 9 For "[ Object]" */
|
||||
if (!return_desc) {
|
||||
return (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
strcpy(return_desc->string.pointer, "[");
|
||||
strcat(return_desc->string.pointer, type_string);
|
||||
strcat(return_desc->string.pointer, " Object]");
|
||||
|
||||
*result_desc = return_desc;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ex_concat_template
|
||||
*
|
||||
* PARAMETERS: operand0 - First source object
|
||||
* operand1 - Second source object
|
||||
* actual_return_desc - Where to place the return object
|
||||
* walk_state - Current walk state
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Concatenate two resource templates
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ex_concat_template(union acpi_operand_object *operand0,
|
||||
union acpi_operand_object *operand1,
|
||||
union acpi_operand_object **actual_return_desc,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
acpi_status status;
|
||||
union acpi_operand_object *return_desc;
|
||||
u8 *new_buf;
|
||||
u8 *end_tag;
|
||||
acpi_size length0;
|
||||
acpi_size length1;
|
||||
acpi_size new_length;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ex_concat_template);
|
||||
|
||||
/*
|
||||
* Find the end_tag descriptor in each resource template.
|
||||
* Note1: returned pointers point TO the end_tag, not past it.
|
||||
* Note2: zero-length buffers are allowed; treated like one end_tag
|
||||
*/
|
||||
|
||||
/* Get the length of the first resource template */
|
||||
|
||||
status = acpi_ut_get_resource_end_tag(operand0, &end_tag);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
length0 = ACPI_PTR_DIFF(end_tag, operand0->buffer.pointer);
|
||||
|
||||
/* Get the length of the second resource template */
|
||||
|
||||
status = acpi_ut_get_resource_end_tag(operand1, &end_tag);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
length1 = ACPI_PTR_DIFF(end_tag, operand1->buffer.pointer);
|
||||
|
||||
/* Combine both lengths, minimum size will be 2 for end_tag */
|
||||
|
||||
new_length = length0 + length1 + sizeof(struct aml_resource_end_tag);
|
||||
|
||||
/* Create a new buffer object for the result (with one end_tag) */
|
||||
|
||||
return_desc = acpi_ut_create_buffer_object(new_length);
|
||||
if (!return_desc) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the templates to the new buffer, 0 first, then 1 follows. One
|
||||
* end_tag descriptor is copied from Operand1.
|
||||
*/
|
||||
new_buf = return_desc->buffer.pointer;
|
||||
memcpy(new_buf, operand0->buffer.pointer, length0);
|
||||
memcpy(new_buf + length0, operand1->buffer.pointer, length1);
|
||||
|
||||
/* Insert end_tag and set the checksum to zero, means "ignore checksum" */
|
||||
|
||||
new_buf[new_length - 1] = 0;
|
||||
new_buf[new_length - 2] = ACPI_RESOURCE_NAME_END_TAG | 1;
|
||||
|
||||
/* Return the completed resource template */
|
||||
|
||||
*actual_return_desc = return_desc;
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
@ -118,7 +118,9 @@ acpi_ex_add_table(u32 table_index,
|
||||
/* Execute any module-level code that was found in the table */
|
||||
|
||||
acpi_ex_exit_interpreter();
|
||||
acpi_ns_exec_module_code_list();
|
||||
if (acpi_gbl_group_module_level_code) {
|
||||
acpi_ns_exec_module_code_list();
|
||||
}
|
||||
acpi_ex_enter_interpreter();
|
||||
|
||||
/*
|
||||
|
@ -124,7 +124,9 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
|
||||
* of ACPI 3.0) is that the to_integer() operator allows both decimal
|
||||
* and hexadecimal strings (hex prefixed with "0x").
|
||||
*/
|
||||
status = acpi_ut_strtoul64((char *)pointer, flags, &result);
|
||||
status = acpi_ut_strtoul64((char *)pointer, flags,
|
||||
acpi_gbl_integer_byte_width,
|
||||
&result);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
@ -439,7 +441,7 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc,
|
||||
* Need enough space for one ASCII integer (plus null terminator)
|
||||
*/
|
||||
return_desc =
|
||||
acpi_ut_create_string_object((acpi_size) string_length);
|
||||
acpi_ut_create_string_object((acpi_size)string_length);
|
||||
if (!return_desc) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
@ -518,7 +520,7 @@ acpi_ex_convert_to_string(union acpi_operand_object * obj_desc,
|
||||
}
|
||||
|
||||
return_desc =
|
||||
acpi_ut_create_string_object((acpi_size) string_length);
|
||||
acpi_ut_create_string_object((acpi_size)string_length);
|
||||
if (!return_desc) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
|
@ -394,7 +394,7 @@ acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state)
|
||||
obj_desc->processor.proc_id = (u8) operand[1]->integer.value;
|
||||
obj_desc->processor.length = (u8) operand[3]->integer.value;
|
||||
obj_desc->processor.address =
|
||||
(acpi_io_address) operand[2]->integer.value;
|
||||
(acpi_io_address)operand[2]->integer.value;
|
||||
|
||||
/* Install the processor object in the parent Node */
|
||||
|
||||
|
@ -55,9 +55,9 @@ ACPI_MODULE_NAME("exdump")
|
||||
*/
|
||||
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
|
||||
/* Local prototypes */
|
||||
static void acpi_ex_out_string(char *title, char *value);
|
||||
static void acpi_ex_out_string(const char *title, const char *value);
|
||||
|
||||
static void acpi_ex_out_pointer(char *title, void *value);
|
||||
static void acpi_ex_out_pointer(const char *title, const void *value);
|
||||
|
||||
static void
|
||||
acpi_ex_dump_object(union acpi_operand_object *obj_desc,
|
||||
@ -365,8 +365,7 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
|
||||
struct acpi_exdump_info *info)
|
||||
{
|
||||
u8 *target;
|
||||
char *name;
|
||||
const char *reference_name;
|
||||
const char *name;
|
||||
u8 count;
|
||||
union acpi_operand_object *start;
|
||||
union acpi_operand_object *data = NULL;
|
||||
@ -459,9 +458,9 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,
|
||||
|
||||
case ACPI_EXD_REFERENCE:
|
||||
|
||||
reference_name = acpi_ut_get_reference_name(obj_desc);
|
||||
acpi_ex_out_string("Class Name",
|
||||
ACPI_CAST_PTR(char, reference_name));
|
||||
acpi_ut_get_reference_name
|
||||
(obj_desc));
|
||||
acpi_ex_dump_reference_obj(obj_desc);
|
||||
break;
|
||||
|
||||
@ -934,12 +933,12 @@ acpi_ex_dump_operands(union acpi_operand_object **operands,
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void acpi_ex_out_string(char *title, char *value)
|
||||
static void acpi_ex_out_string(const char *title, const char *value)
|
||||
{
|
||||
acpi_os_printf("%20s : %s\n", title, value);
|
||||
}
|
||||
|
||||
static void acpi_ex_out_pointer(char *title, void *value)
|
||||
static void acpi_ex_out_pointer(const char *title, const void *value)
|
||||
{
|
||||
acpi_os_printf("%20s : %p\n", title, value);
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ acpi_ex_get_serial_access_length(u32 accessor_type, u32 access_length)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ex_read_data_from_field(struct acpi_walk_state * walk_state,
|
||||
acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *obj_desc,
|
||||
union acpi_operand_object **ret_buffer_desc)
|
||||
{
|
||||
@ -233,7 +233,7 @@ acpi_ex_read_data_from_field(struct acpi_walk_state * walk_state,
|
||||
* Note: Field.length is in bits.
|
||||
*/
|
||||
length =
|
||||
(acpi_size) ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length);
|
||||
(acpi_size)ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length);
|
||||
|
||||
if (length > acpi_gbl_integer_byte_width) {
|
||||
|
||||
|
@ -164,7 +164,7 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
|
||||
if (ACPI_ROUND_UP(rgn_desc->region.length,
|
||||
obj_desc->common_field.
|
||||
access_byte_width) >=
|
||||
((acpi_size) obj_desc->common_field.
|
||||
((acpi_size)obj_desc->common_field.
|
||||
base_byte_offset +
|
||||
obj_desc->common_field.access_byte_width +
|
||||
field_datum_byte_offset)) {
|
||||
@ -897,17 +897,9 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
|
||||
|
||||
access_bit_width = ACPI_MUL_8(obj_desc->common_field.access_byte_width);
|
||||
|
||||
/*
|
||||
* Create the bitmasks used for bit insertion.
|
||||
* Note: This if/else is used to bypass compiler differences with the
|
||||
* shift operator
|
||||
*/
|
||||
if (access_bit_width == ACPI_INTEGER_BIT_SIZE) {
|
||||
width_mask = ACPI_UINT64_MAX;
|
||||
} else {
|
||||
width_mask = ACPI_MASK_BITS_ABOVE(access_bit_width);
|
||||
}
|
||||
/* Create the bitmasks used for bit insertion */
|
||||
|
||||
width_mask = ACPI_MASK_BITS_ABOVE_64(access_bit_width);
|
||||
mask = width_mask &
|
||||
ACPI_MASK_BITS_BELOW(obj_desc->common_field.start_field_bit_offset);
|
||||
|
||||
|
@ -45,7 +45,6 @@
|
||||
#include "accommon.h"
|
||||
#include "acinterp.h"
|
||||
#include "amlcode.h"
|
||||
#include "amlresrc.h"
|
||||
|
||||
#define _COMPONENT ACPI_EXECUTER
|
||||
ACPI_MODULE_NAME("exmisc")
|
||||
@ -138,295 +137,6 @@ acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ex_concat_template
|
||||
*
|
||||
* PARAMETERS: operand0 - First source object
|
||||
* operand1 - Second source object
|
||||
* actual_return_desc - Where to place the return object
|
||||
* walk_state - Current walk state
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Concatenate two resource templates
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ex_concat_template(union acpi_operand_object *operand0,
|
||||
union acpi_operand_object *operand1,
|
||||
union acpi_operand_object **actual_return_desc,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
acpi_status status;
|
||||
union acpi_operand_object *return_desc;
|
||||
u8 *new_buf;
|
||||
u8 *end_tag;
|
||||
acpi_size length0;
|
||||
acpi_size length1;
|
||||
acpi_size new_length;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ex_concat_template);
|
||||
|
||||
/*
|
||||
* Find the end_tag descriptor in each resource template.
|
||||
* Note1: returned pointers point TO the end_tag, not past it.
|
||||
* Note2: zero-length buffers are allowed; treated like one end_tag
|
||||
*/
|
||||
|
||||
/* Get the length of the first resource template */
|
||||
|
||||
status = acpi_ut_get_resource_end_tag(operand0, &end_tag);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
length0 = ACPI_PTR_DIFF(end_tag, operand0->buffer.pointer);
|
||||
|
||||
/* Get the length of the second resource template */
|
||||
|
||||
status = acpi_ut_get_resource_end_tag(operand1, &end_tag);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
length1 = ACPI_PTR_DIFF(end_tag, operand1->buffer.pointer);
|
||||
|
||||
/* Combine both lengths, minimum size will be 2 for end_tag */
|
||||
|
||||
new_length = length0 + length1 + sizeof(struct aml_resource_end_tag);
|
||||
|
||||
/* Create a new buffer object for the result (with one end_tag) */
|
||||
|
||||
return_desc = acpi_ut_create_buffer_object(new_length);
|
||||
if (!return_desc) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the templates to the new buffer, 0 first, then 1 follows. One
|
||||
* end_tag descriptor is copied from Operand1.
|
||||
*/
|
||||
new_buf = return_desc->buffer.pointer;
|
||||
memcpy(new_buf, operand0->buffer.pointer, length0);
|
||||
memcpy(new_buf + length0, operand1->buffer.pointer, length1);
|
||||
|
||||
/* Insert end_tag and set the checksum to zero, means "ignore checksum" */
|
||||
|
||||
new_buf[new_length - 1] = 0;
|
||||
new_buf[new_length - 2] = ACPI_RESOURCE_NAME_END_TAG | 1;
|
||||
|
||||
/* Return the completed resource template */
|
||||
|
||||
*actual_return_desc = return_desc;
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ex_do_concatenate
|
||||
*
|
||||
* PARAMETERS: operand0 - First source object
|
||||
* operand1 - Second source object
|
||||
* actual_return_desc - Where to place the return object
|
||||
* walk_state - Current walk state
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Concatenate two objects OF THE SAME TYPE.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ex_do_concatenate(union acpi_operand_object *operand0,
|
||||
union acpi_operand_object *operand1,
|
||||
union acpi_operand_object **actual_return_desc,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
union acpi_operand_object *local_operand1 = operand1;
|
||||
union acpi_operand_object *return_desc;
|
||||
char *new_buf;
|
||||
const char *type_string;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ex_do_concatenate);
|
||||
|
||||
/*
|
||||
* Convert the second operand if necessary. The first operand
|
||||
* determines the type of the second operand, (See the Data Types
|
||||
* section of the ACPI specification.) Both object types are
|
||||
* guaranteed to be either Integer/String/Buffer by the operand
|
||||
* resolution mechanism.
|
||||
*/
|
||||
switch (operand0->common.type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_integer(operand1, &local_operand1, 16);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_STRING:
|
||||
/*
|
||||
* Per the ACPI spec, Concatenate only supports int/str/buf.
|
||||
* However, we support all objects here as an extension.
|
||||
* This improves the usefulness of the Printf() macro.
|
||||
* 12/2015.
|
||||
*/
|
||||
switch (operand1->common.type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
case ACPI_TYPE_STRING:
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
status =
|
||||
acpi_ex_convert_to_string(operand1, &local_operand1,
|
||||
ACPI_IMPLICIT_CONVERT_HEX);
|
||||
break;
|
||||
|
||||
default:
|
||||
/*
|
||||
* Just emit a string containing the object type.
|
||||
*/
|
||||
type_string =
|
||||
acpi_ut_get_type_name(operand1->common.type);
|
||||
|
||||
local_operand1 = acpi_ut_create_string_object(((acpi_size) strlen(type_string) + 9)); /* 9 For "[Object]" */
|
||||
if (!local_operand1) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
strcpy(local_operand1->string.pointer, "[");
|
||||
strcat(local_operand1->string.pointer, type_string);
|
||||
strcat(local_operand1->string.pointer, " Object]");
|
||||
status = AE_OK;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
status = acpi_ex_convert_to_buffer(operand1, &local_operand1);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
|
||||
operand0->common.type));
|
||||
status = AE_AML_INTERNAL;
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/*
|
||||
* Both operands are now known to be the same object type
|
||||
* (Both are Integer, String, or Buffer), and we can now perform the
|
||||
* concatenation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* There are three cases to handle:
|
||||
*
|
||||
* 1) Two Integers concatenated to produce a new Buffer
|
||||
* 2) Two Strings concatenated to produce a new String
|
||||
* 3) Two Buffers concatenated to produce a new Buffer
|
||||
*/
|
||||
switch (operand0->common.type) {
|
||||
case ACPI_TYPE_INTEGER:
|
||||
|
||||
/* Result of two Integers is a Buffer */
|
||||
/* Need enough buffer space for two integers */
|
||||
|
||||
return_desc = acpi_ut_create_buffer_object((acpi_size)
|
||||
ACPI_MUL_2
|
||||
(acpi_gbl_integer_byte_width));
|
||||
if (!return_desc) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
new_buf = (char *)return_desc->buffer.pointer;
|
||||
|
||||
/* Copy the first integer, LSB first */
|
||||
|
||||
memcpy(new_buf, &operand0->integer.value,
|
||||
acpi_gbl_integer_byte_width);
|
||||
|
||||
/* Copy the second integer (LSB first) after the first */
|
||||
|
||||
memcpy(new_buf + acpi_gbl_integer_byte_width,
|
||||
&local_operand1->integer.value,
|
||||
acpi_gbl_integer_byte_width);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_STRING:
|
||||
|
||||
/* Result of two Strings is a String */
|
||||
|
||||
return_desc = acpi_ut_create_string_object(((acpi_size)
|
||||
operand0->string.
|
||||
length +
|
||||
local_operand1->
|
||||
string.length));
|
||||
if (!return_desc) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
new_buf = return_desc->string.pointer;
|
||||
|
||||
/* Concatenate the strings */
|
||||
|
||||
strcpy(new_buf, operand0->string.pointer);
|
||||
strcat(new_buf, local_operand1->string.pointer);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_BUFFER:
|
||||
|
||||
/* Result of two Buffers is a Buffer */
|
||||
|
||||
return_desc = acpi_ut_create_buffer_object(((acpi_size)
|
||||
operand0->buffer.
|
||||
length +
|
||||
local_operand1->
|
||||
buffer.length));
|
||||
if (!return_desc) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
new_buf = (char *)return_desc->buffer.pointer;
|
||||
|
||||
/* Concatenate the buffers */
|
||||
|
||||
memcpy(new_buf, operand0->buffer.pointer,
|
||||
operand0->buffer.length);
|
||||
memcpy(new_buf + operand0->buffer.length,
|
||||
local_operand1->buffer.pointer,
|
||||
local_operand1->buffer.length);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* Invalid object type, should not happen here */
|
||||
|
||||
ACPI_ERROR((AE_INFO, "Invalid object type: 0x%X",
|
||||
operand0->common.type));
|
||||
status = AE_AML_INTERNAL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
*actual_return_desc = return_desc;
|
||||
|
||||
cleanup:
|
||||
if (local_operand1 != operand1) {
|
||||
acpi_ut_remove_reference(local_operand1);
|
||||
}
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ex_do_math_op
|
||||
|
@ -178,7 +178,7 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
|
||||
|
||||
for (index = 0;
|
||||
(index < ACPI_NAME_SIZE)
|
||||
&& (acpi_ut_valid_acpi_char(*aml_address, 0)); index++) {
|
||||
&& (acpi_ut_valid_name_char(*aml_address, 0)); index++) {
|
||||
char_buf[index] = *aml_address++;
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index]));
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
|
||||
/* Get the Integer values from the objects */
|
||||
|
||||
index = operand[1]->integer.value;
|
||||
length = (acpi_size) operand[2]->integer.value;
|
||||
length = (acpi_size)operand[2]->integer.value;
|
||||
|
||||
/*
|
||||
* If the index is beyond the length of the String/Buffer, or if the
|
||||
@ -198,8 +198,8 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
|
||||
|
||||
else if ((index + length) > operand[0]->string.length) {
|
||||
length =
|
||||
(acpi_size) operand[0]->string.length -
|
||||
(acpi_size) index;
|
||||
(acpi_size)operand[0]->string.length -
|
||||
(acpi_size)index;
|
||||
}
|
||||
|
||||
/* Strings always have a sub-pointer, not so for buffers */
|
||||
@ -209,7 +209,7 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
|
||||
|
||||
/* Always allocate a new buffer for the String */
|
||||
|
||||
buffer = ACPI_ALLOCATE_ZEROED((acpi_size) length + 1);
|
||||
buffer = ACPI_ALLOCATE_ZEROED((acpi_size)length + 1);
|
||||
if (!buffer) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
|
@ -207,7 +207,7 @@ acpi_ex_do_match(u32 match_op,
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state * walk_state)
|
||||
acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state)
|
||||
{
|
||||
union acpi_operand_object **operand = &walk_state->operands[0];
|
||||
union acpi_operand_object *return_desc = NULL;
|
||||
|
@ -325,15 +325,15 @@ acpi_ex_system_io_space_handler(u32 function,
|
||||
switch (function) {
|
||||
case ACPI_READ:
|
||||
|
||||
status = acpi_hw_read_port((acpi_io_address) address,
|
||||
status = acpi_hw_read_port((acpi_io_address)address,
|
||||
&value32, bit_width);
|
||||
*value = value32;
|
||||
break;
|
||||
|
||||
case ACPI_WRITE:
|
||||
|
||||
status = acpi_hw_write_port((acpi_io_address) address,
|
||||
(u32) * value, bit_width);
|
||||
status = acpi_hw_write_port((acpi_io_address)address,
|
||||
(u32)*value, bit_width);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -93,7 +93,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
|
||||
*/
|
||||
node = *object_ptr;
|
||||
source_desc = acpi_ns_get_attached_object(node);
|
||||
entry_type = acpi_ns_get_type((acpi_handle) node);
|
||||
entry_type = acpi_ns_get_type((acpi_handle)node);
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p SourceDesc=%p [%s]\n",
|
||||
node, source_desc,
|
||||
@ -106,7 +106,7 @@ acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
|
||||
|
||||
node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object);
|
||||
source_desc = acpi_ns_get_attached_object(node);
|
||||
entry_type = acpi_ns_get_type((acpi_handle) node);
|
||||
entry_type = acpi_ns_get_type((acpi_handle)node);
|
||||
*object_ptr = node;
|
||||
}
|
||||
|
||||
|
@ -334,7 +334,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
|
||||
acpi_status
|
||||
acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
|
||||
union acpi_operand_object *operand,
|
||||
acpi_object_type * return_type,
|
||||
acpi_object_type *return_type,
|
||||
union acpi_operand_object **return_desc)
|
||||
{
|
||||
union acpi_operand_object *obj_desc = ACPI_CAST_PTR(void, operand);
|
||||
|
@ -131,8 +131,8 @@ acpi_ex_check_object_type(acpi_object_type type_needed,
|
||||
|
||||
acpi_status
|
||||
acpi_ex_resolve_operands(u16 opcode,
|
||||
union acpi_operand_object ** stack_ptr,
|
||||
struct acpi_walk_state * walk_state)
|
||||
union acpi_operand_object **stack_ptr,
|
||||
struct acpi_walk_state *walk_state)
|
||||
{
|
||||
union acpi_operand_object *obj_desc;
|
||||
acpi_status status = AE_OK;
|
||||
|
@ -188,7 +188,7 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
|
||||
* Clear old string and copy in the new one
|
||||
*/
|
||||
memset(target_desc->string.pointer, 0,
|
||||
(acpi_size) target_desc->string.length + 1);
|
||||
(acpi_size)target_desc->string.length + 1);
|
||||
memcpy(target_desc->string.pointer, buffer, length);
|
||||
} else {
|
||||
/*
|
||||
@ -204,7 +204,7 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
|
||||
}
|
||||
|
||||
target_desc->string.pointer =
|
||||
ACPI_ALLOCATE_ZEROED((acpi_size) length + 1);
|
||||
ACPI_ALLOCATE_ZEROED((acpi_size)length + 1);
|
||||
|
||||
if (!target_desc->string.pointer) {
|
||||
return_ACPI_STATUS(AE_NO_MEMORY);
|
||||
|
@ -301,8 +301,8 @@ static u32 acpi_ex_digits_needed(u64 value, u32 base)
|
||||
*
|
||||
* FUNCTION: acpi_ex_eisa_id_to_string
|
||||
*
|
||||
* PARAMETERS: compressed_id - EISAID to be converted
|
||||
* out_string - Where to put the converted string (8 bytes)
|
||||
* PARAMETERS: out_string - Where to put the converted string (8 bytes)
|
||||
* compressed_id - EISAID to be converted
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
@ -354,7 +354,7 @@ void acpi_ex_eisa_id_to_string(char *out_string, u64 compressed_id)
|
||||
* possible 64-bit integer.
|
||||
* value - Value to be converted
|
||||
*
|
||||
* RETURN: None, string
|
||||
* RETURN: Converted string in out_string
|
||||
*
|
||||
* DESCRIPTION: Convert a 64-bit integer to decimal string representation.
|
||||
* Assumes string buffer is large enough to hold the string. The
|
||||
@ -384,9 +384,9 @@ void acpi_ex_integer_to_string(char *out_string, u64 value)
|
||||
* FUNCTION: acpi_ex_pci_cls_to_string
|
||||
*
|
||||
* PARAMETERS: out_string - Where to put the converted string (7 bytes)
|
||||
* PARAMETERS: class_code - PCI class code to be converted (3 bytes)
|
||||
* class_code - PCI class code to be converted (3 bytes)
|
||||
*
|
||||
* RETURN: None
|
||||
* RETURN: Converted string in out_string
|
||||
*
|
||||
* DESCRIPTION: Convert 3-bytes PCI class code to string representation.
|
||||
* Return buffer must be large enough to hold the string. The
|
||||
@ -417,7 +417,7 @@ void acpi_ex_pci_cls_to_string(char *out_string, u8 class_code[3])
|
||||
*
|
||||
* PARAMETERS: space_id - ID to be validated
|
||||
*
|
||||
* RETURN: TRUE if valid/supported ID.
|
||||
* RETURN: TRUE if space_id is a valid/supported ID.
|
||||
*
|
||||
* DESCRIPTION: Validate an operation region space_ID.
|
||||
*
|
||||
|
@ -166,7 +166,7 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info * gpe_event_info)
|
||||
acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info)
|
||||
{
|
||||
struct acpi_gpe_register_info *gpe_register_info;
|
||||
acpi_status status;
|
||||
@ -206,7 +206,7 @@ acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info * gpe_event_info)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
|
||||
acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
|
||||
acpi_event_status *event_status)
|
||||
{
|
||||
u32 in_byte;
|
||||
@ -391,7 +391,7 @@ acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
|
||||
acpi_status
|
||||
acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
|
||||
struct acpi_gpe_block_info * gpe_block,
|
||||
struct acpi_gpe_block_info *gpe_block,
|
||||
void *context)
|
||||
{
|
||||
u32 i;
|
||||
|
@ -51,6 +51,10 @@ ACPI_MODULE_NAME("hwregs")
|
||||
|
||||
#if (!ACPI_REDUCED_HARDWARE)
|
||||
/* Local Prototypes */
|
||||
static u8
|
||||
acpi_hw_get_access_bit_width(struct acpi_generic_address *reg,
|
||||
u8 max_bit_width);
|
||||
|
||||
static acpi_status
|
||||
acpi_hw_read_multiple(u32 *value,
|
||||
struct acpi_generic_address *register_a,
|
||||
@ -63,6 +67,48 @@ acpi_hw_write_multiple(u32 value,
|
||||
|
||||
#endif /* !ACPI_REDUCED_HARDWARE */
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_hw_get_access_bit_width
|
||||
*
|
||||
* PARAMETERS: reg - GAS register structure
|
||||
* max_bit_width - Max bit_width supported (32 or 64)
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Obtain optimal access bit width
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static u8
|
||||
acpi_hw_get_access_bit_width(struct acpi_generic_address *reg, u8 max_bit_width)
|
||||
{
|
||||
u64 address;
|
||||
|
||||
if (!reg->access_width) {
|
||||
/*
|
||||
* Detect old register descriptors where only the bit_width field
|
||||
* makes senses. The target address is copied to handle possible
|
||||
* alignment issues.
|
||||
*/
|
||||
ACPI_MOVE_64_TO_64(&address, ®->address);
|
||||
if (!reg->bit_offset && reg->bit_width &&
|
||||
ACPI_IS_POWER_OF_TWO(reg->bit_width) &&
|
||||
ACPI_IS_ALIGNED(reg->bit_width, 8) &&
|
||||
ACPI_IS_ALIGNED(address, reg->bit_width)) {
|
||||
return (reg->bit_width);
|
||||
} else {
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
|
||||
return (32);
|
||||
} else {
|
||||
return (max_bit_width);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return (1 << (reg->access_width + 2));
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_hw_validate_register
|
||||
@ -83,6 +129,8 @@ acpi_status
|
||||
acpi_hw_validate_register(struct acpi_generic_address *reg,
|
||||
u8 max_bit_width, u64 *address)
|
||||
{
|
||||
u8 bit_width;
|
||||
u8 access_width;
|
||||
|
||||
/* Must have a valid pointer to a GAS structure */
|
||||
|
||||
@ -109,23 +157,25 @@ acpi_hw_validate_register(struct acpi_generic_address *reg,
|
||||
return (AE_SUPPORT);
|
||||
}
|
||||
|
||||
/* Validate the bit_width */
|
||||
/* Validate the access_width */
|
||||
|
||||
if ((reg->bit_width != 8) &&
|
||||
(reg->bit_width != 16) &&
|
||||
(reg->bit_width != 32) && (reg->bit_width != max_bit_width)) {
|
||||
if (reg->access_width > 4) {
|
||||
ACPI_ERROR((AE_INFO,
|
||||
"Unsupported register bit width: 0x%X",
|
||||
reg->bit_width));
|
||||
"Unsupported register access width: 0x%X",
|
||||
reg->access_width));
|
||||
return (AE_SUPPORT);
|
||||
}
|
||||
|
||||
/* Validate the bit_offset. Just a warning for now. */
|
||||
/* Validate the bit_width, convert access_width into number of bits */
|
||||
|
||||
if (reg->bit_offset != 0) {
|
||||
access_width = acpi_hw_get_access_bit_width(reg, max_bit_width);
|
||||
bit_width =
|
||||
ACPI_ROUND_UP(reg->bit_offset + reg->bit_width, access_width);
|
||||
if (max_bit_width < bit_width) {
|
||||
ACPI_WARNING((AE_INFO,
|
||||
"Unsupported register bit offset: 0x%X",
|
||||
reg->bit_offset));
|
||||
"Requested bit width 0x%X is smaller than register bit width 0x%X",
|
||||
max_bit_width, bit_width));
|
||||
return (AE_SUPPORT);
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
@ -145,17 +195,19 @@ acpi_hw_validate_register(struct acpi_generic_address *reg,
|
||||
* 64-bit values is not needed.
|
||||
*
|
||||
* LIMITATIONS: <These limitations also apply to acpi_hw_write>
|
||||
* bit_width must be exactly 8, 16, or 32.
|
||||
* space_ID must be system_memory or system_IO.
|
||||
* bit_offset and access_width are currently ignored, as there has
|
||||
* not been a need to implement these.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg)
|
||||
{
|
||||
u64 address;
|
||||
u8 access_width;
|
||||
u32 bit_width;
|
||||
u8 bit_offset;
|
||||
u64 value64;
|
||||
u32 value32;
|
||||
u8 index;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_NAME(hw_read);
|
||||
@ -167,28 +219,75 @@ acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg)
|
||||
return (status);
|
||||
}
|
||||
|
||||
/* Initialize entire 32-bit return value to zero */
|
||||
|
||||
/*
|
||||
* Initialize entire 32-bit return value to zero, convert access_width
|
||||
* into number of bits based
|
||||
*/
|
||||
*value = 0;
|
||||
access_width = acpi_hw_get_access_bit_width(reg, 32);
|
||||
bit_width = reg->bit_offset + reg->bit_width;
|
||||
bit_offset = reg->bit_offset;
|
||||
|
||||
/*
|
||||
* Two address spaces supported: Memory or IO. PCI_Config is
|
||||
* not supported here because the GAS structure is insufficient
|
||||
*/
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
|
||||
status = acpi_os_read_memory((acpi_physical_address)
|
||||
address, &value64, reg->bit_width);
|
||||
index = 0;
|
||||
while (bit_width) {
|
||||
if (bit_offset >= access_width) {
|
||||
value32 = 0;
|
||||
bit_offset -= access_width;
|
||||
} else {
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
|
||||
status =
|
||||
acpi_os_read_memory((acpi_physical_address)
|
||||
address +
|
||||
index *
|
||||
ACPI_DIV_8
|
||||
(access_width),
|
||||
&value64, access_width);
|
||||
value32 = (u32)value64;
|
||||
} else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
||||
|
||||
*value = (u32)value64;
|
||||
} else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
||||
status = acpi_hw_read_port((acpi_io_address)
|
||||
address +
|
||||
index *
|
||||
ACPI_DIV_8
|
||||
(access_width),
|
||||
&value32,
|
||||
access_width);
|
||||
}
|
||||
|
||||
status = acpi_hw_read_port((acpi_io_address)
|
||||
address, value, reg->bit_width);
|
||||
/*
|
||||
* Use offset style bit masks because:
|
||||
* bit_offset < access_width/bit_width < access_width, and
|
||||
* access_width is ensured to be less than 32-bits by
|
||||
* acpi_hw_validate_register().
|
||||
*/
|
||||
if (bit_offset) {
|
||||
value32 &= ACPI_MASK_BITS_BELOW(bit_offset);
|
||||
bit_offset = 0;
|
||||
}
|
||||
if (bit_width < access_width) {
|
||||
value32 &= ACPI_MASK_BITS_ABOVE(bit_width);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Use offset style bit writes because "Index * AccessWidth" is
|
||||
* ensured to be less than 32-bits by acpi_hw_validate_register().
|
||||
*/
|
||||
ACPI_SET_BITS(value, index * access_width,
|
||||
ACPI_MASK_BITS_ABOVE_32(access_width), value32);
|
||||
|
||||
bit_width -=
|
||||
bit_width > access_width ? access_width : bit_width;
|
||||
index++;
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_IO,
|
||||
"Read: %8.8X width %2d from %8.8X%8.8X (%s)\n",
|
||||
*value, reg->bit_width, ACPI_FORMAT_UINT64(address),
|
||||
*value, access_width, ACPI_FORMAT_UINT64(address),
|
||||
acpi_ut_get_region_name(reg->space_id)));
|
||||
|
||||
return (status);
|
||||
@ -212,6 +311,12 @@ acpi_status acpi_hw_read(u32 *value, struct acpi_generic_address *reg)
|
||||
acpi_status acpi_hw_write(u32 value, struct acpi_generic_address *reg)
|
||||
{
|
||||
u64 address;
|
||||
u8 access_width;
|
||||
u32 bit_width;
|
||||
u8 bit_offset;
|
||||
u64 value64;
|
||||
u32 new_value32, old_value32;
|
||||
u8 index;
|
||||
acpi_status status;
|
||||
|
||||
ACPI_FUNCTION_NAME(hw_write);
|
||||
@ -223,23 +328,145 @@ acpi_status acpi_hw_write(u32 value, struct acpi_generic_address *reg)
|
||||
return (status);
|
||||
}
|
||||
|
||||
/* Convert access_width into number of bits based */
|
||||
|
||||
access_width = acpi_hw_get_access_bit_width(reg, 32);
|
||||
bit_width = reg->bit_offset + reg->bit_width;
|
||||
bit_offset = reg->bit_offset;
|
||||
|
||||
/*
|
||||
* Two address spaces supported: Memory or IO. PCI_Config is
|
||||
* not supported here because the GAS structure is insufficient
|
||||
*/
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
|
||||
status = acpi_os_write_memory((acpi_physical_address)
|
||||
address, (u64)value,
|
||||
reg->bit_width);
|
||||
} else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
||||
index = 0;
|
||||
while (bit_width) {
|
||||
/*
|
||||
* Use offset style bit reads because "Index * AccessWidth" is
|
||||
* ensured to be less than 32-bits by acpi_hw_validate_register().
|
||||
*/
|
||||
new_value32 = ACPI_GET_BITS(&value, index * access_width,
|
||||
ACPI_MASK_BITS_ABOVE_32
|
||||
(access_width));
|
||||
|
||||
status = acpi_hw_write_port((acpi_io_address)
|
||||
address, value, reg->bit_width);
|
||||
if (bit_offset >= access_width) {
|
||||
bit_offset -= access_width;
|
||||
} else {
|
||||
/*
|
||||
* Use offset style bit masks because access_width is ensured
|
||||
* to be less than 32-bits by acpi_hw_validate_register() and
|
||||
* bit_offset/bit_width is less than access_width here.
|
||||
*/
|
||||
if (bit_offset) {
|
||||
new_value32 &= ACPI_MASK_BITS_BELOW(bit_offset);
|
||||
}
|
||||
if (bit_width < access_width) {
|
||||
new_value32 &= ACPI_MASK_BITS_ABOVE(bit_width);
|
||||
}
|
||||
|
||||
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
|
||||
if (bit_offset || bit_width < access_width) {
|
||||
/*
|
||||
* Read old values in order not to modify the bits that
|
||||
* are beyond the register bit_width/bit_offset setting.
|
||||
*/
|
||||
status =
|
||||
acpi_os_read_memory((acpi_physical_address)
|
||||
address +
|
||||
index *
|
||||
ACPI_DIV_8
|
||||
(access_width),
|
||||
&value64,
|
||||
access_width);
|
||||
old_value32 = (u32)value64;
|
||||
|
||||
/*
|
||||
* Use offset style bit masks because access_width is
|
||||
* ensured to be less than 32-bits by
|
||||
* acpi_hw_validate_register() and bit_offset/bit_width is
|
||||
* less than access_width here.
|
||||
*/
|
||||
if (bit_offset) {
|
||||
old_value32 &=
|
||||
ACPI_MASK_BITS_ABOVE
|
||||
(bit_offset);
|
||||
bit_offset = 0;
|
||||
}
|
||||
if (bit_width < access_width) {
|
||||
old_value32 &=
|
||||
ACPI_MASK_BITS_BELOW
|
||||
(bit_width);
|
||||
}
|
||||
|
||||
new_value32 |= old_value32;
|
||||
}
|
||||
|
||||
value64 = (u64)new_value32;
|
||||
status =
|
||||
acpi_os_write_memory((acpi_physical_address)
|
||||
address +
|
||||
index *
|
||||
ACPI_DIV_8
|
||||
(access_width),
|
||||
value64, access_width);
|
||||
} else { /* ACPI_ADR_SPACE_SYSTEM_IO, validated earlier */
|
||||
|
||||
if (bit_offset || bit_width < access_width) {
|
||||
/*
|
||||
* Read old values in order not to modify the bits that
|
||||
* are beyond the register bit_width/bit_offset setting.
|
||||
*/
|
||||
status =
|
||||
acpi_hw_read_port((acpi_io_address)
|
||||
address +
|
||||
index *
|
||||
ACPI_DIV_8
|
||||
(access_width),
|
||||
&old_value32,
|
||||
access_width);
|
||||
|
||||
/*
|
||||
* Use offset style bit masks because access_width is
|
||||
* ensured to be less than 32-bits by
|
||||
* acpi_hw_validate_register() and bit_offset/bit_width is
|
||||
* less than access_width here.
|
||||
*/
|
||||
if (bit_offset) {
|
||||
old_value32 &=
|
||||
ACPI_MASK_BITS_ABOVE
|
||||
(bit_offset);
|
||||
bit_offset = 0;
|
||||
}
|
||||
if (bit_width < access_width) {
|
||||
old_value32 &=
|
||||
ACPI_MASK_BITS_BELOW
|
||||
(bit_width);
|
||||
}
|
||||
|
||||
new_value32 |= old_value32;
|
||||
}
|
||||
|
||||
status = acpi_hw_write_port((acpi_io_address)
|
||||
address +
|
||||
index *
|
||||
ACPI_DIV_8
|
||||
(access_width),
|
||||
new_value32,
|
||||
access_width);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Index * access_width is ensured to be less than 32-bits by
|
||||
* acpi_hw_validate_register().
|
||||
*/
|
||||
bit_width -=
|
||||
bit_width > access_width ? access_width : bit_width;
|
||||
index++;
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_IO,
|
||||
"Wrote: %8.8X width %2d to %8.8X%8.8X (%s)\n",
|
||||
value, reg->bit_width, ACPI_FORMAT_UINT64(address),
|
||||
value, access_width, ACPI_FORMAT_UINT64(address),
|
||||
acpi_ut_get_region_name(reg->space_id)));
|
||||
|
||||
return (status);
|
||||
|
@ -91,10 +91,9 @@ acpi_status acpi_reset(void)
|
||||
* compatibility with other ACPI implementations that have allowed
|
||||
* BIOS code with bad register width values to go unnoticed.
|
||||
*/
|
||||
status =
|
||||
acpi_os_write_port((acpi_io_address) reset_reg->address,
|
||||
acpi_gbl_FADT.reset_value,
|
||||
ACPI_RESET_REGISTER_WIDTH);
|
||||
status = acpi_os_write_port((acpi_io_address)reset_reg->address,
|
||||
acpi_gbl_FADT.reset_value,
|
||||
ACPI_RESET_REGISTER_WIDTH);
|
||||
} else {
|
||||
/* Write the reset value to the reset register */
|
||||
|
||||
@ -504,9 +503,7 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 *sleep_type_a, u8 *sleep_type_b)
|
||||
* Evaluate the \_Sx namespace object containing the register values
|
||||
* for this state
|
||||
*/
|
||||
info->relative_pathname = ACPI_CAST_PTR(char,
|
||||
acpi_gbl_sleep_state_names
|
||||
[sleep_state]);
|
||||
info->relative_pathname = acpi_gbl_sleep_state_names[sleep_state];
|
||||
|
||||
status = acpi_ns_evaluate(info);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
|
@ -107,9 +107,10 @@ acpi_status acpi_ns_root_initialize(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
status = acpi_ns_lookup(NULL, init_val->name, init_val->type,
|
||||
ACPI_IMODE_LOAD_PASS2,
|
||||
ACPI_NS_NO_UPSEARCH, NULL, &new_node);
|
||||
status =
|
||||
acpi_ns_lookup(NULL, (char *)init_val->name, init_val->type,
|
||||
ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH,
|
||||
NULL, &new_node);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
ACPI_EXCEPTION((AE_INFO, status,
|
||||
"Could not create predefined name %s",
|
||||
|
@ -79,7 +79,8 @@ acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
|
||||
/* String-to-Integer conversion */
|
||||
|
||||
status = acpi_ut_strtoul64(original_object->string.pointer,
|
||||
ACPI_ANY_BASE, &value);
|
||||
ACPI_ANY_BASE,
|
||||
acpi_gbl_integer_byte_width, &value);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (status);
|
||||
}
|
||||
@ -317,7 +318,7 @@ acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_convert_to_unicode(struct acpi_namespace_node * scope,
|
||||
acpi_ns_convert_to_unicode(struct acpi_namespace_node *scope,
|
||||
union acpi_operand_object *original_object,
|
||||
union acpi_operand_object **return_object)
|
||||
{
|
||||
@ -384,7 +385,7 @@ acpi_ns_convert_to_unicode(struct acpi_namespace_node * scope,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_convert_to_resource(struct acpi_namespace_node * scope,
|
||||
acpi_ns_convert_to_resource(struct acpi_namespace_node *scope,
|
||||
union acpi_operand_object *original_object,
|
||||
union acpi_operand_object **return_object)
|
||||
{
|
||||
@ -463,7 +464,7 @@ acpi_ns_convert_to_resource(struct acpi_namespace_node * scope,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_convert_to_reference(struct acpi_namespace_node * scope,
|
||||
acpi_ns_convert_to_reference(struct acpi_namespace_node *scope,
|
||||
union acpi_operand_object *original_object,
|
||||
union acpi_operand_object **return_object)
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ acpi_ns_get_max_depth(acpi_handle obj_handle,
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void acpi_ns_print_pathname(u32 num_segments, char *pathname)
|
||||
void acpi_ns_print_pathname(u32 num_segments, const char *pathname)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
@ -114,6 +114,9 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
|
||||
acpi_os_printf("]\n");
|
||||
}
|
||||
|
||||
#ifdef ACPI_OBSOLETE_FUNCTIONS
|
||||
/* Not used at this time, perhaps later */
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_dump_pathname
|
||||
@ -131,7 +134,8 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
|
||||
acpi_ns_dump_pathname(acpi_handle handle,
|
||||
const char *msg, u32 level, u32 component)
|
||||
{
|
||||
|
||||
ACPI_FUNCTION_TRACE(ns_dump_pathname);
|
||||
@ -148,6 +152,7 @@ acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
|
||||
acpi_os_printf("\n");
|
||||
return_VOID;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
|
@ -140,6 +140,7 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
|
||||
{
|
||||
acpi_status status = AE_OK;
|
||||
struct acpi_device_walk_info info;
|
||||
acpi_handle handle;
|
||||
|
||||
ACPI_FUNCTION_TRACE(ns_initialize_devices);
|
||||
|
||||
@ -190,6 +191,27 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
info.num_INI++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Execute \_SB._INI.
|
||||
* There appears to be a strict order requirement for \_SB._INI,
|
||||
* which should be evaluated before any _REG evaluations.
|
||||
*/
|
||||
status = acpi_get_handle(NULL, "\\_SB", &handle);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
memset(info.evaluate_info, 0,
|
||||
sizeof(struct acpi_evaluate_info));
|
||||
info.evaluate_info->prefix_node = handle;
|
||||
info.evaluate_info->relative_pathname =
|
||||
METHOD_NAME__INI;
|
||||
info.evaluate_info->parameters = NULL;
|
||||
info.evaluate_info->flags = ACPI_IGNORE_RETURN_VALUE;
|
||||
|
||||
status = acpi_ns_evaluate(info.evaluate_info);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
info.num_INI++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -198,6 +220,12 @@ acpi_status acpi_ns_initialize_devices(u32 flags)
|
||||
* Note: Any objects accessed by the _REG methods will be automatically
|
||||
* initialized, even if they contain executable AML (see the call to
|
||||
* acpi_ns_initialize_objects below).
|
||||
*
|
||||
* Note: According to the ACPI specification, we actually needn't execute
|
||||
* _REG for system_memory/system_io operation regions, but for PCI_Config
|
||||
* operation regions, it is required to evaluate _REG for those on a PCI
|
||||
* root bus that doesn't contain _BBN object. So this code is kept here
|
||||
* in order not to break things.
|
||||
*/
|
||||
if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
|
||||
@ -592,33 +620,37 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
|
||||
* Note: We know there is an _INI within this subtree, but it may not be
|
||||
* under this particular device, it may be lower in the branch.
|
||||
*/
|
||||
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
|
||||
(ACPI_TYPE_METHOD, device_node, METHOD_NAME__INI));
|
||||
if (!ACPI_COMPARE_NAME(device_node->name.ascii, "_SB_") ||
|
||||
device_node->parent != acpi_gbl_root_node) {
|
||||
ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
|
||||
(ACPI_TYPE_METHOD, device_node,
|
||||
METHOD_NAME__INI));
|
||||
|
||||
memset(info, 0, sizeof(struct acpi_evaluate_info));
|
||||
info->prefix_node = device_node;
|
||||
info->relative_pathname = METHOD_NAME__INI;
|
||||
info->parameters = NULL;
|
||||
info->flags = ACPI_IGNORE_RETURN_VALUE;
|
||||
memset(info, 0, sizeof(struct acpi_evaluate_info));
|
||||
info->prefix_node = device_node;
|
||||
info->relative_pathname = METHOD_NAME__INI;
|
||||
info->parameters = NULL;
|
||||
info->flags = ACPI_IGNORE_RETURN_VALUE;
|
||||
|
||||
status = acpi_ns_evaluate(info);
|
||||
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
walk_info->num_INI++;
|
||||
}
|
||||
status = acpi_ns_evaluate(info);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
walk_info->num_INI++;
|
||||
}
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
else if (status != AE_NOT_FOUND) {
|
||||
else if (status != AE_NOT_FOUND) {
|
||||
|
||||
/* Ignore error and move on to next device */
|
||||
/* Ignore error and move on to next device */
|
||||
|
||||
char *scope_name =
|
||||
acpi_ns_get_normalized_pathname(device_node, TRUE);
|
||||
char *scope_name =
|
||||
acpi_ns_get_normalized_pathname(device_node, TRUE);
|
||||
|
||||
ACPI_EXCEPTION((AE_INFO, status, "during %s._INI execution",
|
||||
scope_name));
|
||||
ACPI_FREE(scope_name);
|
||||
}
|
||||
ACPI_EXCEPTION((AE_INFO, status,
|
||||
"during %s._INI execution",
|
||||
scope_name));
|
||||
ACPI_FREE(scope_name);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Ignore errors from above */
|
||||
|
||||
|
@ -123,8 +123,8 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
|
||||
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
|
||||
acpi_ns_delete_namespace_by_owner(acpi_gbl_root_table_list.
|
||||
tables[table_index].owner_id);
|
||||
acpi_tb_release_owner_id(table_index);
|
||||
|
||||
acpi_tb_release_owner_id(table_index);
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,7 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node)
|
||||
|
||||
acpi_status
|
||||
acpi_ns_handle_to_pathname(acpi_handle target_handle,
|
||||
struct acpi_buffer * buffer, u8 no_trailing)
|
||||
struct acpi_buffer *buffer, u8 no_trailing)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_namespace_node *node;
|
||||
|
@ -399,7 +399,7 @@ acpi_ns_attach_data(struct acpi_namespace_node *node,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_detach_data(struct acpi_namespace_node * node,
|
||||
acpi_ns_detach_data(struct acpi_namespace_node *node,
|
||||
acpi_object_handler handler)
|
||||
{
|
||||
union acpi_operand_object *obj_desc;
|
||||
@ -444,7 +444,7 @@ acpi_ns_detach_data(struct acpi_namespace_node * node,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_get_attached_data(struct acpi_namespace_node * node,
|
||||
acpi_ns_get_attached_data(struct acpi_namespace_node *node,
|
||||
acpi_object_handler handler, void **data)
|
||||
{
|
||||
union acpi_operand_object *obj_desc;
|
||||
|
@ -62,6 +62,10 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
|
||||
u32 count1,
|
||||
u8 type2, u32 count2, u32 start_index);
|
||||
|
||||
static acpi_status
|
||||
acpi_ns_custom_package(struct acpi_evaluate_info *info,
|
||||
union acpi_operand_object **elements, u32 count);
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_check_package
|
||||
@ -135,6 +139,11 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
|
||||
* PTYPE2 packages contain subpackages
|
||||
*/
|
||||
switch (package->ret_info.type) {
|
||||
case ACPI_PTYPE_CUSTOM:
|
||||
|
||||
status = acpi_ns_custom_package(info, elements, count);
|
||||
break;
|
||||
|
||||
case ACPI_PTYPE1_FIXED:
|
||||
/*
|
||||
* The package count is fixed and there are no subpackages
|
||||
@ -179,6 +188,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (status);
|
||||
}
|
||||
|
||||
elements++;
|
||||
}
|
||||
break;
|
||||
@ -225,6 +235,7 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
|
||||
return (status);
|
||||
}
|
||||
}
|
||||
|
||||
elements++;
|
||||
}
|
||||
break;
|
||||
@ -569,11 +580,13 @@ acpi_ns_check_package_list(struct acpi_evaluate_info *info,
|
||||
if (sub_package->package.count < expected_count) {
|
||||
goto package_too_small;
|
||||
}
|
||||
|
||||
if (sub_package->package.count <
|
||||
package->ret_info.count1) {
|
||||
expected_count = package->ret_info.count1;
|
||||
goto package_too_small;
|
||||
}
|
||||
|
||||
if (expected_count == 0) {
|
||||
/*
|
||||
* Either the num_entries element was originally zero or it was
|
||||
@ -620,6 +633,83 @@ package_too_small:
|
||||
return (AE_AML_OPERAND_VALUE);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_custom_package
|
||||
*
|
||||
* PARAMETERS: info - Method execution information block
|
||||
* elements - Pointer to the package elements array
|
||||
* count - Element count for the package
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Check a returned package object for the correct count and
|
||||
* correct type of all sub-objects.
|
||||
*
|
||||
* NOTE: Currently used for the _BIX method only. When needed for two or more
|
||||
* methods, probably a detect/dispatch mechanism will be required.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static acpi_status
|
||||
acpi_ns_custom_package(struct acpi_evaluate_info *info,
|
||||
union acpi_operand_object **elements, u32 count)
|
||||
{
|
||||
u32 expected_count;
|
||||
u32 version;
|
||||
acpi_status status = AE_OK;
|
||||
|
||||
ACPI_FUNCTION_NAME(ns_custom_package);
|
||||
|
||||
/* Get version number, must be Integer */
|
||||
|
||||
if ((*elements)->common.type != ACPI_TYPE_INTEGER) {
|
||||
ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname,
|
||||
info->node_flags,
|
||||
"Return Package has invalid object type for version number"));
|
||||
return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
|
||||
}
|
||||
|
||||
version = (u32)(*elements)->integer.value;
|
||||
expected_count = 21; /* Version 1 */
|
||||
|
||||
if (version == 0) {
|
||||
expected_count = 20; /* Version 0 */
|
||||
}
|
||||
|
||||
if (count < expected_count) {
|
||||
ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname,
|
||||
info->node_flags,
|
||||
"Return Package is too small - found %u elements, expected %u",
|
||||
count, expected_count));
|
||||
return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
|
||||
} else if (count > expected_count) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_REPAIR,
|
||||
"%s: Return Package is larger than needed - "
|
||||
"found %u, expected %u\n",
|
||||
info->full_pathname, count, expected_count));
|
||||
}
|
||||
|
||||
/* Validate all elements of the returned package */
|
||||
|
||||
status = acpi_ns_check_package_elements(info, elements,
|
||||
ACPI_RTYPE_INTEGER, 16,
|
||||
ACPI_RTYPE_STRING, 4, 0);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/* Version 1 has a single trailing integer */
|
||||
|
||||
if (version > 0) {
|
||||
status = acpi_ns_check_package_elements(info, elements + 20,
|
||||
ACPI_RTYPE_INTEGER, 1,
|
||||
0, 0, 20);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_check_package_elements
|
||||
@ -661,6 +751,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (status);
|
||||
}
|
||||
|
||||
this_element++;
|
||||
}
|
||||
|
||||
@ -671,6 +762,7 @@ acpi_ns_check_package_elements(struct acpi_evaluate_info *info,
|
||||
if (ACPI_FAILURE(status)) {
|
||||
return (status);
|
||||
}
|
||||
|
||||
this_element++;
|
||||
}
|
||||
|
||||
|
@ -399,7 +399,7 @@ static const struct acpi_simple_repair_info *acpi_ns_match_simple_repair(struct
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_repair_null_element(struct acpi_evaluate_info * info,
|
||||
acpi_ns_repair_null_element(struct acpi_evaluate_info *info,
|
||||
u32 expected_btypes,
|
||||
u32 package_index,
|
||||
union acpi_operand_object **return_object_ptr)
|
||||
|
@ -54,9 +54,9 @@ ACPI_MODULE_NAME("nsrepair2")
|
||||
* be repaired on a per-name basis.
|
||||
*/
|
||||
typedef
|
||||
acpi_status(*acpi_repair_function) (struct acpi_evaluate_info * info,
|
||||
union acpi_operand_object
|
||||
**return_object_ptr);
|
||||
acpi_status (*acpi_repair_function) (struct acpi_evaluate_info * info,
|
||||
union acpi_operand_object **
|
||||
return_object_ptr);
|
||||
|
||||
typedef struct acpi_repair_info {
|
||||
char name[ACPI_NAME_SIZE];
|
||||
|
@ -272,11 +272,11 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
|
||||
result = &internal_name[i];
|
||||
} else if (num_segments == 2) {
|
||||
internal_name[i] = AML_DUAL_NAME_PREFIX;
|
||||
result = &internal_name[(acpi_size) i + 1];
|
||||
result = &internal_name[(acpi_size)i + 1];
|
||||
} else {
|
||||
internal_name[i] = AML_MULTI_NAME_PREFIX_OP;
|
||||
internal_name[(acpi_size) i + 1] = (char)num_segments;
|
||||
result = &internal_name[(acpi_size) i + 2];
|
||||
internal_name[(acpi_size)i + 1] = (char)num_segments;
|
||||
result = &internal_name[(acpi_size)i + 2];
|
||||
}
|
||||
}
|
||||
|
||||
@ -456,7 +456,7 @@ acpi_ns_externalize_name(u32 internal_name_length,
|
||||
|
||||
names_index = prefix_length + 2;
|
||||
num_segments = (u8)
|
||||
internal_name[(acpi_size) prefix_length + 1];
|
||||
internal_name[(acpi_size)prefix_length + 1];
|
||||
break;
|
||||
|
||||
case AML_DUAL_NAME_PREFIX:
|
||||
|
@ -256,7 +256,7 @@ acpi_evaluate_object(acpi_handle handle,
|
||||
* Allocate a new parameter block for the internal objects
|
||||
* Add 1 to count to allow for null terminated internal list
|
||||
*/
|
||||
info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size) info->
|
||||
info->parameters = ACPI_ALLOCATE_ZEROED(((acpi_size)info->
|
||||
param_count +
|
||||
1) * sizeof(void *));
|
||||
if (!info->parameters) {
|
||||
@ -280,13 +280,12 @@ acpi_evaluate_object(acpi_handle handle,
|
||||
info->parameters[info->param_count] = NULL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#ifdef _FUTURE_FEATURE
|
||||
|
||||
/*
|
||||
* Begin incoming argument count analysis. Check for too few args
|
||||
* and too many args.
|
||||
*/
|
||||
|
||||
switch (acpi_ns_get_type(info->node)) {
|
||||
case ACPI_TYPE_METHOD:
|
||||
|
||||
@ -370,68 +369,68 @@ acpi_evaluate_object(acpi_handle handle,
|
||||
* If we are expecting a return value, and all went well above,
|
||||
* copy the return value to an external object.
|
||||
*/
|
||||
if (return_buffer) {
|
||||
if (!info->return_object) {
|
||||
return_buffer->length = 0;
|
||||
if (!return_buffer) {
|
||||
goto cleanup_return_object;
|
||||
}
|
||||
|
||||
if (!info->return_object) {
|
||||
return_buffer->length = 0;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==
|
||||
ACPI_DESC_TYPE_NAMED) {
|
||||
/*
|
||||
* If we received a NS Node as a return object, this means that
|
||||
* the object we are evaluating has nothing interesting to
|
||||
* return (such as a mutex, etc.) We return an error because
|
||||
* these types are essentially unsupported by this interface.
|
||||
* We don't check up front because this makes it easier to add
|
||||
* support for various types at a later date if necessary.
|
||||
*/
|
||||
status = AE_TYPE;
|
||||
info->return_object = NULL; /* No need to delete a NS Node */
|
||||
return_buffer->length = 0;
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto cleanup_return_object;
|
||||
}
|
||||
|
||||
/* Dereference Index and ref_of references */
|
||||
|
||||
acpi_ns_resolve_references(info);
|
||||
|
||||
/* Get the size of the returned object */
|
||||
|
||||
status = acpi_ut_get_object_size(info->return_object,
|
||||
&buffer_space_needed);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
|
||||
/* Validate/Allocate/Clear caller buffer */
|
||||
|
||||
status = acpi_ut_initialize_buffer(return_buffer,
|
||||
buffer_space_needed);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/*
|
||||
* Caller's buffer is too small or a new one can't
|
||||
* be allocated
|
||||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Needed buffer size %X, %s\n",
|
||||
(u32)buffer_space_needed,
|
||||
acpi_format_exception(status)));
|
||||
} else {
|
||||
if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==
|
||||
ACPI_DESC_TYPE_NAMED) {
|
||||
/*
|
||||
* If we received a NS Node as a return object, this means that
|
||||
* the object we are evaluating has nothing interesting to
|
||||
* return (such as a mutex, etc.) We return an error because
|
||||
* these types are essentially unsupported by this interface.
|
||||
* We don't check up front because this makes it easier to add
|
||||
* support for various types at a later date if necessary.
|
||||
*/
|
||||
status = AE_TYPE;
|
||||
info->return_object = NULL; /* No need to delete a NS Node */
|
||||
return_buffer->length = 0;
|
||||
}
|
||||
/* We have enough space for the object, build it */
|
||||
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
|
||||
/* Dereference Index and ref_of references */
|
||||
|
||||
acpi_ns_resolve_references(info);
|
||||
|
||||
/* Get the size of the returned object */
|
||||
|
||||
status =
|
||||
acpi_ut_get_object_size(info->return_object,
|
||||
&buffer_space_needed);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
|
||||
/* Validate/Allocate/Clear caller buffer */
|
||||
|
||||
status =
|
||||
acpi_ut_initialize_buffer
|
||||
(return_buffer,
|
||||
buffer_space_needed);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
/*
|
||||
* Caller's buffer is too small or a new one can't
|
||||
* be allocated
|
||||
*/
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Needed buffer size %X, %s\n",
|
||||
(u32)
|
||||
buffer_space_needed,
|
||||
acpi_format_exception
|
||||
(status)));
|
||||
} else {
|
||||
/* We have enough space for the object, build it */
|
||||
|
||||
status =
|
||||
acpi_ut_copy_iobject_to_eobject
|
||||
(info->return_object,
|
||||
return_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
status =
|
||||
acpi_ut_copy_iobject_to_eobject(info->return_object,
|
||||
return_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
cleanup_return_object:
|
||||
|
||||
if (info->return_object) {
|
||||
/*
|
||||
* Delete the internal return object. NOTE: Interpreter must be
|
||||
|
@ -78,7 +78,7 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
|
||||
|
||||
acpi_status
|
||||
acpi_get_handle(acpi_handle parent,
|
||||
acpi_string pathname, acpi_handle * ret_handle)
|
||||
acpi_string pathname, acpi_handle *ret_handle)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_namespace_node *node = NULL;
|
||||
@ -155,7 +155,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_handle)
|
||||
*
|
||||
******************************************************************************/
|
||||
acpi_status
|
||||
acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
|
||||
acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer *buffer)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_namespace_node *node;
|
||||
@ -448,7 +448,7 @@ acpi_get_object_info(acpi_handle handle,
|
||||
/* Point past the CID PNP_DEVICE_ID array */
|
||||
|
||||
next_id_string +=
|
||||
((acpi_size) cid_list->count *
|
||||
((acpi_size)cid_list->count *
|
||||
sizeof(struct acpi_pnp_device_id));
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ ACPI_MODULE_NAME("nsxfobj")
|
||||
* DESCRIPTION: This routine returns the type associatd with a particular handle
|
||||
*
|
||||
******************************************************************************/
|
||||
acpi_status acpi_get_type(acpi_handle handle, acpi_object_type * ret_type)
|
||||
acpi_status acpi_get_type(acpi_handle handle, acpi_object_type *ret_type)
|
||||
{
|
||||
struct acpi_namespace_node *node;
|
||||
acpi_status status;
|
||||
@ -115,7 +115,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_type)
|
||||
* Handle.
|
||||
*
|
||||
******************************************************************************/
|
||||
acpi_status acpi_get_parent(acpi_handle handle, acpi_handle * ret_handle)
|
||||
acpi_status acpi_get_parent(acpi_handle handle, acpi_handle *ret_handle)
|
||||
{
|
||||
struct acpi_namespace_node *node;
|
||||
struct acpi_namespace_node *parent_node;
|
||||
@ -183,7 +183,7 @@ ACPI_EXPORT_SYMBOL(acpi_get_parent)
|
||||
acpi_status
|
||||
acpi_get_next_object(acpi_object_type type,
|
||||
acpi_handle parent,
|
||||
acpi_handle child, acpi_handle * ret_handle)
|
||||
acpi_handle child, acpi_handle *ret_handle)
|
||||
{
|
||||
acpi_status status;
|
||||
struct acpi_namespace_node *node;
|
||||
|
@ -87,7 +87,7 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state)
|
||||
* used to encode the package length, either 0,1,2, or 3
|
||||
*/
|
||||
byte_count = (aml[0] >> 6);
|
||||
parser_state->aml += ((acpi_size) byte_count + 1);
|
||||
parser_state->aml += ((acpi_size)byte_count + 1);
|
||||
|
||||
/* Get bytes 3, 2, 1 as needed */
|
||||
|
||||
|
@ -158,7 +158,7 @@ const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
char *acpi_ps_get_opcode_name(u16 opcode)
|
||||
const char *acpi_ps_get_opcode_name(u16 opcode)
|
||||
{
|
||||
#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
|
||||
|
||||
|
@ -130,8 +130,8 @@ u16 acpi_ps_peek_opcode(struct acpi_parse_state * parser_state)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
|
||||
union acpi_parse_object * op)
|
||||
acpi_ps_complete_this_op(struct acpi_walk_state *walk_state,
|
||||
union acpi_parse_object *op)
|
||||
{
|
||||
union acpi_parse_object *prev;
|
||||
union acpi_parse_object *next;
|
||||
|
@ -128,7 +128,7 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode, u8 *aml)
|
||||
if (op_info->flags & AML_DEFER) {
|
||||
flags = ACPI_PARSEOP_DEFERRED;
|
||||
} else if (op_info->flags & AML_NAMED) {
|
||||
flags = ACPI_PARSEOP_NAMED;
|
||||
flags = ACPI_PARSEOP_NAMED_OBJECT;
|
||||
} else if (opcode == AML_INT_BYTELIST_OP) {
|
||||
flags = ACPI_PARSEOP_BYTELIST;
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ acpi_debug_trace(const char *name, u32 debug_level, u32 debug_layer, u32 flags)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_ps_execute_method(struct acpi_evaluate_info * info)
|
||||
acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
|
||||
{
|
||||
acpi_status status;
|
||||
union acpi_parse_object *op;
|
||||
|
@ -112,7 +112,7 @@ acpi_rs_struct_option_length(struct acpi_resource_source *resource_source)
|
||||
* resource_source_index (1).
|
||||
*/
|
||||
if (resource_source->string_ptr) {
|
||||
return ((acpi_rs_length) (resource_source->string_length + 1));
|
||||
return ((acpi_rs_length)(resource_source->string_length + 1));
|
||||
}
|
||||
|
||||
return (0);
|
||||
@ -188,7 +188,7 @@ acpi_rs_stream_option_length(u32 resource_length,
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
acpi_size resource_list_size, acpi_size * size_needed)
|
||||
acpi_size resource_list_size, acpi_size *size_needed)
|
||||
{
|
||||
acpi_size aml_size_needed = 0;
|
||||
struct acpi_resource *resource_end;
|
||||
@ -278,11 +278,11 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
* 16-Bit Address Resource:
|
||||
* Add the size of the optional resource_source info
|
||||
*/
|
||||
total_size = (acpi_rs_length) (total_size +
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
address16.
|
||||
resource_source));
|
||||
total_size = (acpi_rs_length)(total_size +
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
address16.
|
||||
resource_source));
|
||||
break;
|
||||
|
||||
case ACPI_RESOURCE_TYPE_ADDRESS32:
|
||||
@ -290,11 +290,11 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
* 32-Bit Address Resource:
|
||||
* Add the size of the optional resource_source info
|
||||
*/
|
||||
total_size = (acpi_rs_length) (total_size +
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
address32.
|
||||
resource_source));
|
||||
total_size = (acpi_rs_length)(total_size +
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
address32.
|
||||
resource_source));
|
||||
break;
|
||||
|
||||
case ACPI_RESOURCE_TYPE_ADDRESS64:
|
||||
@ -302,11 +302,11 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
* 64-Bit Address Resource:
|
||||
* Add the size of the optional resource_source info
|
||||
*/
|
||||
total_size = (acpi_rs_length) (total_size +
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
address64.
|
||||
resource_source));
|
||||
total_size = (acpi_rs_length)(total_size +
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
address64.
|
||||
resource_source));
|
||||
break;
|
||||
|
||||
case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
|
||||
@ -315,28 +315,28 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
* Add the size of each additional optional interrupt beyond the
|
||||
* required 1 (4 bytes for each u32 interrupt number)
|
||||
*/
|
||||
total_size = (acpi_rs_length) (total_size +
|
||||
((resource->data.
|
||||
extended_irq.
|
||||
interrupt_count -
|
||||
1) * 4) +
|
||||
/* Add the size of the optional resource_source info */
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
total_size = (acpi_rs_length)(total_size +
|
||||
((resource->data.
|
||||
extended_irq.
|
||||
resource_source));
|
||||
interrupt_count -
|
||||
1) * 4) +
|
||||
/* Add the size of the optional resource_source info */
|
||||
acpi_rs_struct_option_length
|
||||
(&resource->data.
|
||||
extended_irq.
|
||||
resource_source));
|
||||
break;
|
||||
|
||||
case ACPI_RESOURCE_TYPE_GPIO:
|
||||
|
||||
total_size = (acpi_rs_length) (total_size +
|
||||
(resource->data.gpio.
|
||||
pin_table_length * 2) +
|
||||
resource->data.gpio.
|
||||
resource_source.
|
||||
string_length +
|
||||
resource->data.gpio.
|
||||
vendor_length);
|
||||
total_size = (acpi_rs_length)(total_size +
|
||||
(resource->data.gpio.
|
||||
pin_table_length * 2) +
|
||||
resource->data.gpio.
|
||||
resource_source.
|
||||
string_length +
|
||||
resource->data.gpio.
|
||||
vendor_length);
|
||||
|
||||
break;
|
||||
|
||||
@ -348,14 +348,14 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
common_serial_bus.
|
||||
type];
|
||||
|
||||
total_size = (acpi_rs_length) (total_size +
|
||||
resource->data.
|
||||
i2c_serial_bus.
|
||||
resource_source.
|
||||
string_length +
|
||||
resource->data.
|
||||
i2c_serial_bus.
|
||||
vendor_length);
|
||||
total_size = (acpi_rs_length)(total_size +
|
||||
resource->data.
|
||||
i2c_serial_bus.
|
||||
resource_source.
|
||||
string_length +
|
||||
resource->data.
|
||||
i2c_serial_bus.
|
||||
vendor_length);
|
||||
|
||||
break;
|
||||
|
||||
@ -397,8 +397,8 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
u32 aml_buffer_length, acpi_size * size_needed)
|
||||
acpi_rs_get_list_length(u8 *aml_buffer,
|
||||
u32 aml_buffer_length, acpi_size *size_needed)
|
||||
{
|
||||
acpi_status status;
|
||||
u8 *end_aml;
|
||||
@ -610,7 +610,7 @@ acpi_rs_get_list_length(u8 * aml_buffer,
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
|
||||
acpi_size * buffer_size_needed)
|
||||
acpi_size *buffer_size_needed)
|
||||
{
|
||||
u32 number_of_elements;
|
||||
acpi_size temp_size_needed = 0;
|
||||
|
@ -347,7 +347,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
|
||||
(u8 *) output_buffer->pointer);
|
||||
path_buffer.pointer = user_prt->source;
|
||||
|
||||
status = acpi_ns_handle_to_pathname((acpi_handle) node, &path_buffer, FALSE);
|
||||
status = acpi_ns_handle_to_pathname((acpi_handle)node, &path_buffer, FALSE);
|
||||
|
||||
/* +1 to include null terminator */
|
||||
|
||||
|
@ -52,17 +52,17 @@ ACPI_MODULE_NAME("rsdump")
|
||||
* All functions in this module are used by the AML Debugger only
|
||||
*/
|
||||
/* Local prototypes */
|
||||
static void acpi_rs_out_string(char *title, char *value);
|
||||
static void acpi_rs_out_string(const char *title, const char *value);
|
||||
|
||||
static void acpi_rs_out_integer8(char *title, u8 value);
|
||||
static void acpi_rs_out_integer8(const char *title, u8 value);
|
||||
|
||||
static void acpi_rs_out_integer16(char *title, u16 value);
|
||||
static void acpi_rs_out_integer16(const char *title, u16 value);
|
||||
|
||||
static void acpi_rs_out_integer32(char *title, u32 value);
|
||||
static void acpi_rs_out_integer32(const char *title, u32 value);
|
||||
|
||||
static void acpi_rs_out_integer64(char *title, u64 value);
|
||||
static void acpi_rs_out_integer64(const char *title, u64 value);
|
||||
|
||||
static void acpi_rs_out_title(char *title);
|
||||
static void acpi_rs_out_title(const char *title);
|
||||
|
||||
static void acpi_rs_dump_byte_list(u16 length, u8 *data);
|
||||
|
||||
@ -208,7 +208,7 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
|
||||
{
|
||||
u8 *target = NULL;
|
||||
u8 *previous_target;
|
||||
char *name;
|
||||
const char *name;
|
||||
u8 count;
|
||||
|
||||
/* First table entry must contain the table length (# of table entries) */
|
||||
@ -248,10 +248,8 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
|
||||
case ACPI_RSD_UINT8:
|
||||
|
||||
if (table->pointer) {
|
||||
acpi_rs_out_string(name, ACPI_CAST_PTR(char,
|
||||
table->
|
||||
pointer
|
||||
[*target]));
|
||||
acpi_rs_out_string(name,
|
||||
table->pointer[*target]);
|
||||
} else {
|
||||
acpi_rs_out_integer8(name, ACPI_GET8(target));
|
||||
}
|
||||
@ -276,26 +274,20 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
|
||||
|
||||
case ACPI_RSD_1BITFLAG:
|
||||
|
||||
acpi_rs_out_string(name, ACPI_CAST_PTR(char,
|
||||
table->
|
||||
pointer[*target &
|
||||
0x01]));
|
||||
acpi_rs_out_string(name,
|
||||
table->pointer[*target & 0x01]);
|
||||
break;
|
||||
|
||||
case ACPI_RSD_2BITFLAG:
|
||||
|
||||
acpi_rs_out_string(name, ACPI_CAST_PTR(char,
|
||||
table->
|
||||
pointer[*target &
|
||||
0x03]));
|
||||
acpi_rs_out_string(name,
|
||||
table->pointer[*target & 0x03]);
|
||||
break;
|
||||
|
||||
case ACPI_RSD_3BITFLAG:
|
||||
|
||||
acpi_rs_out_string(name, ACPI_CAST_PTR(char,
|
||||
table->
|
||||
pointer[*target &
|
||||
0x07]));
|
||||
acpi_rs_out_string(name,
|
||||
table->pointer[*target & 0x07]);
|
||||
break;
|
||||
|
||||
case ACPI_RSD_SHORTLIST:
|
||||
@ -481,7 +473,7 @@ static void acpi_rs_dump_address_common(union acpi_resource_data *resource)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void acpi_rs_out_string(char *title, char *value)
|
||||
static void acpi_rs_out_string(const char *title, const char *value)
|
||||
{
|
||||
|
||||
acpi_os_printf("%27s : %s", title, value);
|
||||
@ -491,30 +483,30 @@ static void acpi_rs_out_string(char *title, char *value)
|
||||
acpi_os_printf("\n");
|
||||
}
|
||||
|
||||
static void acpi_rs_out_integer8(char *title, u8 value)
|
||||
static void acpi_rs_out_integer8(const char *title, u8 value)
|
||||
{
|
||||
acpi_os_printf("%27s : %2.2X\n", title, value);
|
||||
}
|
||||
|
||||
static void acpi_rs_out_integer16(char *title, u16 value)
|
||||
static void acpi_rs_out_integer16(const char *title, u16 value)
|
||||
{
|
||||
|
||||
acpi_os_printf("%27s : %4.4X\n", title, value);
|
||||
}
|
||||
|
||||
static void acpi_rs_out_integer32(char *title, u32 value)
|
||||
static void acpi_rs_out_integer32(const char *title, u32 value)
|
||||
{
|
||||
|
||||
acpi_os_printf("%27s : %8.8X\n", title, value);
|
||||
}
|
||||
|
||||
static void acpi_rs_out_integer64(char *title, u64 value)
|
||||
static void acpi_rs_out_integer64(const char *title, u64 value)
|
||||
{
|
||||
|
||||
acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));
|
||||
}
|
||||
|
||||
static void acpi_rs_out_title(char *title)
|
||||
static void acpi_rs_out_title(const char *title)
|
||||
{
|
||||
|
||||
acpi_os_printf("%27s : ", title);
|
||||
|
@ -330,19 +330,20 @@ struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = {
|
||||
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type), "Type", acpi_gbl_sbt_decode}, \
|
||||
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.producer_consumer), "ProducerConsumer", acpi_gbl_consume_decode}, \
|
||||
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.slave_mode), "SlaveMode", acpi_gbl_sm_decode}, \
|
||||
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.connection_sharing),"ConnectionSharing", acpi_gbl_shr_decode}, \
|
||||
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type_revision_id), "TypeRevisionId", NULL}, \
|
||||
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.type_data_length), "TypeDataLength", NULL}, \
|
||||
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (common_serial_bus.resource_source), "ResourceSource", NULL}, \
|
||||
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.vendor_length), "VendorLength", NULL}, \
|
||||
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (common_serial_bus.vendor_data), "VendorData", NULL},
|
||||
|
||||
struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[10] = {
|
||||
struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[11] = {
|
||||
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_common_serial_bus),
|
||||
"Common Serial Bus", NULL},
|
||||
ACPI_RS_DUMP_COMMON_SERIAL_BUS
|
||||
};
|
||||
|
||||
struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[13] = {
|
||||
struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[14] = {
|
||||
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_i2c_serial_bus),
|
||||
"I2C Serial Bus", NULL},
|
||||
ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG,
|
||||
@ -355,7 +356,7 @@ struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[13] = {
|
||||
"SlaveAddress", NULL},
|
||||
};
|
||||
|
||||
struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[17] = {
|
||||
struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[18] = {
|
||||
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_spi_serial_bus),
|
||||
"Spi Serial Bus", NULL},
|
||||
ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG,
|
||||
@ -376,7 +377,7 @@ struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[17] = {
|
||||
"ConnectionSpeed", NULL},
|
||||
};
|
||||
|
||||
struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[19] = {
|
||||
struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[20] = {
|
||||
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_uart_serial_bus),
|
||||
"Uart Serial Bus", NULL},
|
||||
ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_2BITFLAG,
|
||||
|
@ -87,7 +87,7 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
|
||||
return_ACPI_STATUS(AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
if (((acpi_size) resource) & 0x3) {
|
||||
if (((acpi_size)resource) & 0x3) {
|
||||
|
||||
/* Each internal resource struct is expected to be 32-bit aligned */
|
||||
|
||||
|
@ -151,7 +151,7 @@ struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[16] = {
|
||||
struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {
|
||||
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
|
||||
ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
|
||||
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)},
|
||||
@ -177,6 +177,11 @@ struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[16] = {
|
||||
AML_OFFSET(common_serial_bus.flags),
|
||||
1},
|
||||
|
||||
{ACPI_RSC_1BITFLAG,
|
||||
ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
|
||||
AML_OFFSET(common_serial_bus.flags),
|
||||
2},
|
||||
|
||||
{ACPI_RSC_MOVE8,
|
||||
ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
|
||||
AML_OFFSET(common_serial_bus.type_revision_id),
|
||||
@ -237,7 +242,7 @@ struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[16] = {
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[20] = {
|
||||
struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
|
||||
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
|
||||
ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
|
||||
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
|
||||
@ -263,6 +268,11 @@ struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[20] = {
|
||||
AML_OFFSET(common_serial_bus.flags),
|
||||
1},
|
||||
|
||||
{ACPI_RSC_1BITFLAG,
|
||||
ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
|
||||
AML_OFFSET(common_serial_bus.flags),
|
||||
2},
|
||||
|
||||
{ACPI_RSC_MOVE8,
|
||||
ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
|
||||
AML_OFFSET(common_serial_bus.type_revision_id),
|
||||
@ -339,7 +349,7 @@ struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[20] = {
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[22] = {
|
||||
struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
|
||||
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
|
||||
ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
|
||||
ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
|
||||
@ -365,6 +375,11 @@ struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[22] = {
|
||||
AML_OFFSET(common_serial_bus.flags),
|
||||
1},
|
||||
|
||||
{ACPI_RSC_1BITFLAG,
|
||||
ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
|
||||
AML_OFFSET(common_serial_bus.flags),
|
||||
2},
|
||||
|
||||
{ACPI_RSC_MOVE8,
|
||||
ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
|
||||
AML_OFFSET(common_serial_bus.type_revision_id),
|
||||
|
@ -338,7 +338,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
|
||||
* Note: Some resource descriptors will have an additional null, so
|
||||
* we add 1 to the minimum length.
|
||||
*/
|
||||
if (total_length > (acpi_rsdesc_size) (minimum_length + 1)) {
|
||||
if (total_length > (acpi_rsdesc_size)(minimum_length + 1)) {
|
||||
|
||||
/* Get the resource_source_index */
|
||||
|
||||
@ -377,7 +377,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
|
||||
ACPI_CAST_PTR(char,
|
||||
&aml_resource_source[1]));
|
||||
|
||||
return ((acpi_rs_length) total_length);
|
||||
return ((acpi_rs_length)total_length);
|
||||
}
|
||||
|
||||
/* resource_source is not present */
|
||||
@ -406,9 +406,9 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_rsdesc_size
|
||||
acpi_rs_set_resource_source(union aml_resource * aml,
|
||||
acpi_rs_set_resource_source(union aml_resource *aml,
|
||||
acpi_rs_length minimum_length,
|
||||
struct acpi_resource_source * resource_source)
|
||||
struct acpi_resource_source *resource_source)
|
||||
{
|
||||
u8 *aml_resource_source;
|
||||
acpi_rsdesc_size descriptor_length;
|
||||
@ -466,8 +466,8 @@ acpi_rs_set_resource_source(union aml_resource * aml,
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_prt_method_data(struct acpi_namespace_node * node,
|
||||
struct acpi_buffer * ret_buffer)
|
||||
acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
|
||||
struct acpi_buffer *ret_buffer)
|
||||
{
|
||||
union acpi_operand_object *obj_desc;
|
||||
acpi_status status;
|
||||
@ -671,7 +671,7 @@ acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
|
||||
|
||||
acpi_status
|
||||
acpi_rs_get_method_data(acpi_handle handle,
|
||||
char *path, struct acpi_buffer *ret_buffer)
|
||||
const char *path, struct acpi_buffer *ret_buffer)
|
||||
{
|
||||
union acpi_operand_object *obj_desc;
|
||||
acpi_status status;
|
||||
|
@ -433,8 +433,8 @@ ACPI_EXPORT_SYMBOL(acpi_resource_to_address64)
|
||||
acpi_status
|
||||
acpi_get_vendor_resource(acpi_handle device_handle,
|
||||
char *name,
|
||||
struct acpi_vendor_uuid * uuid,
|
||||
struct acpi_buffer * ret_buffer)
|
||||
struct acpi_vendor_uuid *uuid,
|
||||
struct acpi_buffer *ret_buffer)
|
||||
{
|
||||
struct acpi_vendor_walk_info info;
|
||||
acpi_status status;
|
||||
@ -539,7 +539,7 @@ acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context)
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_walk_resource_buffer(struct acpi_buffer * buffer,
|
||||
acpi_walk_resource_buffer(struct acpi_buffer *buffer,
|
||||
acpi_walk_resource_callback user_function,
|
||||
void *context)
|
||||
{
|
||||
|
@ -368,7 +368,7 @@ acpi_status acpi_tb_validate_temp_table(struct acpi_table_desc *table_desc)
|
||||
*****************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature)
|
||||
acpi_tb_verify_temp_table(struct acpi_table_desc *table_desc, char *signature)
|
||||
{
|
||||
acpi_status status = AE_OK;
|
||||
|
||||
@ -401,9 +401,9 @@ acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature)
|
||||
ACPI_EXCEPTION((AE_INFO, AE_NO_MEMORY,
|
||||
"%4.4s 0x%8.8X%8.8X"
|
||||
" Attempted table install failed",
|
||||
acpi_ut_valid_acpi_name(table_desc->
|
||||
signature.
|
||||
ascii) ?
|
||||
acpi_ut_valid_nameseg(table_desc->
|
||||
signature.
|
||||
ascii) ?
|
||||
table_desc->signature.ascii : "????",
|
||||
ACPI_FORMAT_UINT64(table_desc->
|
||||
address)));
|
||||
@ -454,7 +454,7 @@ acpi_status acpi_tb_resize_root_table_list(void)
|
||||
table_count = acpi_gbl_root_table_list.current_table_count;
|
||||
}
|
||||
|
||||
tables = ACPI_ALLOCATE_ZEROED(((acpi_size) table_count +
|
||||
tables = ACPI_ALLOCATE_ZEROED(((acpi_size)table_count +
|
||||
ACPI_ROOT_TABLE_SIZE_INCREMENT) *
|
||||
sizeof(struct acpi_table_desc));
|
||||
if (!tables) {
|
||||
@ -467,8 +467,7 @@ acpi_status acpi_tb_resize_root_table_list(void)
|
||||
|
||||
if (acpi_gbl_root_table_list.tables) {
|
||||
memcpy(tables, acpi_gbl_root_table_list.tables,
|
||||
(acpi_size) table_count *
|
||||
sizeof(struct acpi_table_desc));
|
||||
(acpi_size)table_count * sizeof(struct acpi_table_desc));
|
||||
|
||||
if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) {
|
||||
ACPI_FREE(acpi_gbl_root_table_list.tables);
|
||||
@ -701,7 +700,7 @@ acpi_status acpi_tb_release_owner_id(u32 table_index)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id * owner_id)
|
||||
acpi_status acpi_tb_get_owner_id(u32 table_index, acpi_owner_id *owner_id)
|
||||
{
|
||||
acpi_status status = AE_BAD_PARAMETER;
|
||||
|
||||
|
@ -53,7 +53,7 @@ static void
|
||||
acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
|
||||
u8 space_id,
|
||||
u8 byte_width,
|
||||
u64 address, char *register_name, u8 flags);
|
||||
u64 address, const char *register_name, u8 flags);
|
||||
|
||||
static void acpi_tb_convert_fadt(void);
|
||||
|
||||
@ -65,7 +65,7 @@ acpi_tb_select_address(char *register_name, u32 address32, u64 address64);
|
||||
/* Table for conversion of FADT to common internal format and FADT validation */
|
||||
|
||||
typedef struct acpi_fadt_info {
|
||||
char *name;
|
||||
const char *name;
|
||||
u16 address64;
|
||||
u16 address32;
|
||||
u16 length;
|
||||
@ -192,7 +192,7 @@ static void
|
||||
acpi_tb_init_generic_address(struct acpi_generic_address *generic_address,
|
||||
u8 space_id,
|
||||
u8 byte_width,
|
||||
u64 address, char *register_name, u8 flags)
|
||||
u64 address, const char *register_name, u8 flags)
|
||||
{
|
||||
u8 bit_width;
|
||||
|
||||
@ -344,7 +344,7 @@ void acpi_tb_parse_fadt(void)
|
||||
|
||||
/* Obtain the DSDT and FACS tables via their addresses within the FADT */
|
||||
|
||||
acpi_tb_install_fixed_table((acpi_physical_address) acpi_gbl_FADT.Xdsdt,
|
||||
acpi_tb_install_fixed_table((acpi_physical_address)acpi_gbl_FADT.Xdsdt,
|
||||
ACPI_SIG_DSDT, &acpi_gbl_dsdt_index);
|
||||
|
||||
/* If Hardware Reduced flag is set, there is no FACS */
|
||||
@ -385,14 +385,15 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
|
||||
{
|
||||
/*
|
||||
* Check if the FADT is larger than the largest table that we expect
|
||||
* (the ACPI 5.0 version). If so, truncate the table, and issue
|
||||
* a warning.
|
||||
* (typically the current ACPI specification version). If so, truncate
|
||||
* the table, and issue a warning.
|
||||
*/
|
||||
if (length > sizeof(struct acpi_table_fadt)) {
|
||||
ACPI_BIOS_WARNING((AE_INFO,
|
||||
"FADT (revision %u) is longer than ACPI 5.0 version, "
|
||||
"FADT (revision %u) is longer than %s length, "
|
||||
"truncating length %u to %u",
|
||||
table->revision, length,
|
||||
table->revision, ACPI_FADT_CONFORMANCE,
|
||||
length,
|
||||
(u32)sizeof(struct acpi_table_fadt)));
|
||||
}
|
||||
|
||||
@ -467,7 +468,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
|
||||
|
||||
static void acpi_tb_convert_fadt(void)
|
||||
{
|
||||
char *name;
|
||||
const char *name;
|
||||
struct acpi_generic_address *address64;
|
||||
u32 address32;
|
||||
u8 length;
|
||||
@ -646,9 +647,12 @@ static void acpi_tb_convert_fadt(void)
|
||||
if ((address64->address && !length) ||
|
||||
(!address64->address && length)) {
|
||||
ACPI_BIOS_WARNING((AE_INFO,
|
||||
"Optional FADT field %s has zero address or length: "
|
||||
"0x%8.8X%8.8X/0x%X",
|
||||
name,
|
||||
"Optional FADT field %s has valid %s but zero %s: "
|
||||
"0x%8.8X%8.8X/0x%X", name,
|
||||
(length ? "Length" :
|
||||
"Address"),
|
||||
(length ? "Address" :
|
||||
"Length"),
|
||||
ACPI_FORMAT_UINT64
|
||||
(address64->address),
|
||||
length));
|
||||
|
@ -76,7 +76,7 @@ acpi_tb_find_table(char *signature,
|
||||
|
||||
/* Validate the input table signature */
|
||||
|
||||
if (!acpi_is_valid_signature(signature)) {
|
||||
if (!acpi_ut_valid_nameseg(signature)) {
|
||||
return_ACPI_STATUS(AE_BAD_SIGNATURE);
|
||||
}
|
||||
|
||||
|
@ -299,9 +299,9 @@ acpi_tb_install_standard_table(acpi_physical_address address,
|
||||
ACPI_BIOS_ERROR((AE_INFO,
|
||||
"Table has invalid signature [%4.4s] (0x%8.8X), "
|
||||
"must be SSDT or OEMx",
|
||||
acpi_ut_valid_acpi_name(new_table_desc.
|
||||
signature.
|
||||
ascii) ?
|
||||
acpi_ut_valid_nameseg(new_table_desc.
|
||||
signature.
|
||||
ascii) ?
|
||||
new_table_desc.signature.
|
||||
ascii : "????",
|
||||
new_table_desc.signature.integer));
|
||||
|
@ -231,7 +231,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)
|
||||
ACPI_FORMAT_UINT64(address64)));
|
||||
}
|
||||
#endif
|
||||
return ((acpi_physical_address) (address64));
|
||||
return ((acpi_physical_address)(address64));
|
||||
}
|
||||
}
|
||||
|
||||
@ -287,12 +287,12 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
|
||||
* the XSDT if the revision is > 1 and the XSDT pointer is present,
|
||||
* as per the ACPI specification.
|
||||
*/
|
||||
address = (acpi_physical_address) rsdp->xsdt_physical_address;
|
||||
address = (acpi_physical_address)rsdp->xsdt_physical_address;
|
||||
table_entry_size = ACPI_XSDT_ENTRY_SIZE;
|
||||
} else {
|
||||
/* Root table is an RSDT (32-bit physical addresses) */
|
||||
|
||||
address = (acpi_physical_address) rsdp->rsdt_physical_address;
|
||||
address = (acpi_physical_address)rsdp->rsdt_physical_address;
|
||||
table_entry_size = ACPI_RSDT_ENTRY_SIZE;
|
||||
}
|
||||
|
||||
@ -380,30 +380,3 @@ next_table:
|
||||
acpi_os_unmap_memory(table, length);
|
||||
return_ACPI_STATUS(AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_is_valid_signature
|
||||
*
|
||||
* PARAMETERS: signature - Sig string to be validated
|
||||
*
|
||||
* RETURN: TRUE if signature is has 4 valid ACPI characters
|
||||
*
|
||||
* DESCRIPTION: Validate an ACPI table signature.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
u8 acpi_is_valid_signature(char *signature)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
/* Validate each character in the signature */
|
||||
|
||||
for (i = 0; i < ACPI_NAME_SIZE; i++) {
|
||||
if (!acpi_ut_valid_acpi_char(signature[i], i)) {
|
||||
return (FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user