提交 d9ff9638 编写于 作者: L Len Brown

Pull acpica into release branch

...@@ -586,6 +586,10 @@ acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt) ...@@ -586,6 +586,10 @@ acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt)
flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
if (gpe_xrupt->previous) { if (gpe_xrupt->previous) {
gpe_xrupt->previous->next = gpe_xrupt->next; gpe_xrupt->previous->next = gpe_xrupt->next;
} else {
/* No previous, update list head */
acpi_gbl_gpe_xrupt_list_head = gpe_xrupt->next;
} }
if (gpe_xrupt->next) { if (gpe_xrupt->next) {
......
...@@ -284,6 +284,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle, ...@@ -284,6 +284,7 @@ acpi_ev_pci_config_region_setup(acpi_handle handle,
} }
if (!pci_device_node) { if (!pci_device_node) {
ACPI_FREE(pci_id);
return_ACPI_STATUS(AE_AML_OPERAND_TYPE); return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
} }
......
...@@ -211,14 +211,17 @@ void acpi_tb_parse_fadt(acpi_native_uint table_index, u8 flags) ...@@ -211,14 +211,17 @@ void acpi_tb_parse_fadt(acpi_native_uint table_index, u8 flags)
* DESCRIPTION: Get a local copy of the FADT and convert it to a common format. * DESCRIPTION: Get a local copy of the FADT and convert it to a common format.
* Performs validation on some important FADT fields. * Performs validation on some important FADT fields.
* *
* NOTE: We create a local copy of the FADT regardless of the version.
*
******************************************************************************/ ******************************************************************************/
void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length) void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
{ {
/* /*
* Check if the FADT is larger than what we know about (ACPI 2.0 version). * Check if the FADT is larger than the largest table that we expect
* Truncate the table, but make some noise. * (the ACPI 2.0/3.0 version). If so, truncate the table, and issue
* a warning.
*/ */
if (length > sizeof(struct acpi_table_fadt)) { if (length > sizeof(struct acpi_table_fadt)) {
ACPI_WARNING((AE_INFO, ACPI_WARNING((AE_INFO,
...@@ -227,10 +230,12 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length) ...@@ -227,10 +230,12 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
sizeof(struct acpi_table_fadt))); sizeof(struct acpi_table_fadt)));
} }
/* Copy the entire FADT locally. Zero first for tb_convert_fadt */ /* Clear the entire local FADT */
ACPI_MEMSET(&acpi_gbl_FADT, 0, sizeof(struct acpi_table_fadt)); ACPI_MEMSET(&acpi_gbl_FADT, 0, sizeof(struct acpi_table_fadt));
/* Copy the original FADT, up to sizeof (struct acpi_table_fadt) */
ACPI_MEMCPY(&acpi_gbl_FADT, table, ACPI_MEMCPY(&acpi_gbl_FADT, table,
ACPI_MIN(length, sizeof(struct acpi_table_fadt))); ACPI_MIN(length, sizeof(struct acpi_table_fadt)));
...@@ -251,7 +256,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length) ...@@ -251,7 +256,7 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
* RETURN: None * RETURN: None
* *
* DESCRIPTION: Converts all versions of the FADT to a common internal format. * DESCRIPTION: Converts all versions of the FADT to a common internal format.
* -> Expand all 32-bit addresses to 64-bit. * Expand all 32-bit addresses to 64-bit.
* *
* NOTE: acpi_gbl_FADT must be of size (struct acpi_table_fadt), * NOTE: acpi_gbl_FADT must be of size (struct acpi_table_fadt),
* and must contain a copy of the actual FADT. * and must contain a copy of the actual FADT.
...@@ -292,8 +297,23 @@ static void acpi_tb_convert_fadt(void) ...@@ -292,8 +297,23 @@ static void acpi_tb_convert_fadt(void)
} }
/* /*
* Expand the 32-bit V1.0 addresses to the 64-bit "X" generic address * For ACPI 1.0 FADTs (revision 1 or 2), ensure that reserved fields which
* structures as necessary. * should be zero are indeed zero. This will workaround BIOSs that
* inadvertently place values in these fields.
*
* The ACPI 1.0 reserved fields that will be zeroed are the bytes located at
* offset 45, 55, 95, and the word located at offset 109, 110.
*/
if (acpi_gbl_FADT.header.revision < 3) {
acpi_gbl_FADT.preferred_profile = 0;
acpi_gbl_FADT.pstate_control = 0;
acpi_gbl_FADT.cst_control = 0;
acpi_gbl_FADT.boot_flags = 0;
}
/*
* Expand the ACPI 1.0 32-bit V1.0 addresses to the ACPI 2.0 64-bit "X"
* generic address structures as necessary.
*/ */
for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) { for (i = 0; i < ACPI_FADT_INFO_ENTRIES; i++) {
target = target =
...@@ -349,18 +369,6 @@ static void acpi_tb_convert_fadt(void) ...@@ -349,18 +369,6 @@ static void acpi_tb_convert_fadt(void)
acpi_gbl_FADT.xpm1a_event_block.space_id; acpi_gbl_FADT.xpm1a_event_block.space_id;
} }
/*
* For ACPI 1.0 FADTs, ensure that reserved fields (which should be zero)
* are indeed zero. This will workaround BIOSs that inadvertently placed
* values in these fields.
*/
if (acpi_gbl_FADT.header.revision < 3) {
acpi_gbl_FADT.preferred_profile = 0;
acpi_gbl_FADT.pstate_control = 0;
acpi_gbl_FADT.cst_control = 0;
acpi_gbl_FADT.boot_flags = 0;
}
} }
/****************************************************************************** /******************************************************************************
......
...@@ -136,7 +136,7 @@ ...@@ -136,7 +136,7 @@
/*! [Begin] no source code translation */ /*! [Begin] no source code translation */
#if defined(__linux__) #if defined(_LINUX) || defined(__linux__)
#include "aclinux.h" #include "aclinux.h"
#elif defined(_AED_EFI) #elif defined(_AED_EFI)
......
...@@ -91,7 +91,10 @@ ...@@ -91,7 +91,10 @@
#define ACPI_USE_NATIVE_DIVIDE #define ACPI_USE_NATIVE_DIVIDE
#endif #endif
#ifndef __cdecl
#define __cdecl #define __cdecl
#endif
#define ACPI_FLUSH_CPU_CACHE() #define ACPI_FLUSH_CPU_CACHE()
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册