Skip to contentSkip to conversation

ACPICA: 20140926 Release

PATCH In review Lv Zheng 2 participants 12 messages Oct 10, 2014 – Oct 21, 2014

Subsystems (2)
lore
Share & tools
lore

Lv Zheng

author
#0 lore raw

cover ACPICA: 20140926 Release

The 20140926 ACPICA kernel-resident subsystem updates are linuxized based on the pm/linux-next branch to form this patchset.

The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. i386 + allyes + CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes + CONFIG_ACPI=n
5. x86_64 + default + COFNIG_ACPI=y
6. x86_64 + allyes + CONFIG_ACPI=y
7. x86_64 + default + COFNIG_ACPI=n
8. x86_64 + allyes + CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. x86_64 + default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All drivers/acpi configurations
All platform drivers

The divergences checking result:
Before applying (20140828 Release):
848 lines (962 lines)
After applying (20140926 Release):
852 lines
PS:
1. The indication of 710 lines in the last release cover has wrongly included unmerged divergence reductions, it should be 848 lines.
2. The indication of 852 lines shows an increment of divergence by applying this release, this is actually because there is a new API acpi_enable_all_wakeup_gpes() introduced in the recent linux-pm branch that hasn't been back ported to the ACPICA upstream yet. If this is included for re-counting 20140828 release, the 848 lines should be 962 lines. So this release has reduced 110 lines of divergence.

Bob Moore (4):
ACPICA: Add string for _DDN method name.
ACPICA: iASL/Disassembler: Add support for hardware summary mapfiles.
ACPICA: acpiexec: Do not put STDIN into raw mode unless it is a
terminal.
ACPICA: Update version to 20140926.

Lv Zheng (6):
ACPICA: acpidump: Add ACPI 1.0 RSDP support.
ACPICA: Events: Reduce indent divergences of events files.
ACPICA: Events: Reduce source code difference in
acpi_install_gpe_handler().
ACPICA: Events: Update GPE handler removal, match behavior of handler
install.
ACPICA: Events: Reduce source code difference for the
ACPI_EVENT_FLAG_HANDLE support.
ACPICA: Events: Reduce source code difference for the
ACPI_EVENT_FLAG_HANDLE renaming.

 drivers/acpi/acpica/achware.h                      |    2 +-
 drivers/acpi/acpica/aclocal.h                      |    4 +-
 drivers/acpi/acpica/actables.h                     |    2 +
 drivers/acpi/acpica/amlresrc.h                     |   34 +++++++++++++++++
 drivers/acpi/acpica/evgpe.c                        |   23 +++++------
 drivers/acpi/acpica/evgpeinit.c                    |    1 +
 drivers/acpi/acpica/evxface.c                      |   27 ++++++++-----
 drivers/acpi/acpica/evxfevnt.c                     |   40 +++++++++++++-------
 drivers/acpi/acpica/evxfgpe.c                      |   12 ++----
 drivers/acpi/acpica/hwgpe.c                        |    9 ++++-
 drivers/acpi/acpica/tbxfroot.c                     |   33 +++++++++++++++-
 drivers/acpi/scan.c                                |    2 +-
 drivers/acpi/sysfs.c                               |    4 +-
 include/acpi/acnames.h                             |    1 +
 include/acpi/acpixf.h                              |    2 +-
 include/acpi/actypes.h                             |    4 +-
 .../acpi/os_specific/service_layers/osunixxf.c     |    8 ++++
 tools/power/acpi/tools/acpidump/apdump.c           |    2 +-
 18 files changed, 156 insertions(+), 54 deletions(-)
Signature · 1 line
1.7.10
author
#1 lore raw

PATCH 1/10 ACPICA: Add string for _DDN method name.

From: Bob Moore <[email protected]>

The _DDN method will be used internally.

---
 include/acpi/acnames.h |    1 +
 1 file changed, 1 insertion(+)
include/acpi/acnames.h +1 -0
index f97804b..7461327 100644
@@ -52,6 +52,7 @@
 #define METHOD_NAME__CBA        "_CBA"
 #define METHOD_NAME__CID        "_CID"
 #define METHOD_NAME__CRS        "_CRS"
+#define METHOD_NAME__DDN        "_DDN"
 #define METHOD_NAME__HID        "_HID"
 #define METHOD_NAME__INI        "_INI"
 #define METHOD_NAME__PLD        "_PLD"
Signature · 1 line
1.7.10
author
#2 lore raw

PATCH 2/10 ACPICA: acpidump: Add ACPI 1.0 RSDP support.

In reply to Lv Zheng

The acpidump currently always uses ACPI 2.0 format to dump RSDP, this patch adds ACPI 1.0 RSDP support.

---
 drivers/acpi/acpica/actables.h           |    2 ++
 drivers/acpi/acpica/tbxfroot.c           |   33 +++++++++++++++++++++++++++++-
 tools/power/acpi/tools/acpidump/apdump.c |    2 +-
 3 files changed, 35 insertions(+), 2 deletions(-)
drivers/acpi/acpica/actables.h +2 -0
index f148827..1afe46e 100644
@@ -49,6 +49,8 @@ acpi_status acpi_allocate_root_table(u32 initial_table_count);
 /*
  * tbxfroot - Root pointer utilities
  */
+u32 acpi_tb_get_rsdp_length(struct acpi_table_rsdp *rsdp);
+
 acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp);
 
 u8 *acpi_tb_scan_memory_for_rsdp(u8 *start_address, u32 length);
drivers/acpi/acpica/tbxfroot.c +32 -1
index 65ab8fe..43a54af 100644
@@ -50,6 +50,36 @@ ACPI_MODULE_NAME("tbxfroot")
 
 /*******************************************************************************
  *
+ * FUNCTION:    acpi_tb_get_rsdp_length
+ *
+ * PARAMETERS:  rsdp                - Pointer to RSDP
+ *
+ * RETURN:      Table length
+ *
+ * DESCRIPTION: Get the length of the RSDP
+ *
+ ******************************************************************************/
+u32 acpi_tb_get_rsdp_length(struct acpi_table_rsdp *rsdp)
+{
+
+	if (!ACPI_VALIDATE_RSDP_SIG(rsdp->signature)) {
+
+		/* BAD Signature */
+
+		return (0);
+	}
+
+	/* "Length" field is available if table version >= 2 */
+
+	if (rsdp->revision >= 2) {
+		return (rsdp->length);
+	} else {
+		return (ACPI_RSDP_CHECKSUM_LENGTH);
+	}
+}
+
+/*******************************************************************************
+ *
  * FUNCTION:    acpi_tb_validate_rsdp
  *
  * PARAMETERS:  rsdp                - Pointer to unvalidated RSDP
@@ -59,7 +89,8 @@ ACPI_MODULE_NAME("tbxfroot")
  * DESCRIPTION: Validate the RSDP (ptr)
  *
  ******************************************************************************/
-acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp)
+
+acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp)
 {
 
 	/*
tools/power/acpi/tools/acpidump/apdump.c +1 -1
index 53cee78..24d3296 100644
@@ -146,7 +146,7 @@ u32 ap_get_table_length(struct acpi_table_header *table)
 
 	if (ACPI_VALIDATE_RSDP_SIG(table->signature)) {
 		rsdp = ACPI_CAST_PTR(struct acpi_table_rsdp, table);
-		return (rsdp->length);
+		return (acpi_tb_get_rsdp_length(rsdp));
 	}
 
 	/* Normal ACPI table */
Signature · 1 line
1.7.10
author
#3 lore raw

PATCH 3/10 ACPICA: Events: Reduce indent divergences of events files.

In reply to Lv Zheng

This patch reduces indent divergences first in order to reduce human intervention work for the follow-up linuxized event patches.

This patch only reduces source code differences in indentation. Though the divergence report doesn't care about these differences, they do hurt patch maintanence. We need them to be reduced before applying the follow-up linuxized event patches.

---
 drivers/acpi/acpica/achware.h   |    2 +-
 drivers/acpi/acpica/aclocal.h   |    4 ++--
 drivers/acpi/acpica/evgpe.c     |   23 ++++++++++++-----------
 drivers/acpi/acpica/evgpeinit.c |    1 +
 drivers/acpi/acpica/evxface.c   |    9 ++++-----
 drivers/acpi/acpica/evxfgpe.c   |    9 ++++-----
 drivers/acpi/acpica/hwgpe.c     |    2 +-
 7 files changed, 25 insertions(+), 25 deletions(-)
drivers/acpi/acpica/achware.h +1 -1
index 2ad2351..c318d3e 100644
@@ -127,7 +127,7 @@ acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
 
 acpi_status
 acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
-		       acpi_event_status * event_status);
+		       acpi_event_status *event_status);
 
 acpi_status acpi_hw_disable_all_gpes(void);
 
drivers/acpi/acpica/aclocal.h +2 -2
index 2747279..c00e7e4 100644
@@ -413,8 +413,8 @@ struct acpi_gpe_handler_info {
 	acpi_gpe_handler address;	/* Address of handler, if any */
 	void *context;		/* Context to be passed to handler */
 	struct acpi_namespace_node *method_node;	/* Method node for this GPE level (saved) */
-	u8 original_flags;      /* Original (pre-handler) GPE info */
-	u8 originally_enabled;  /* True if GPE was originally enabled */
+	u8 original_flags;	/* Original (pre-handler) GPE info */
+	u8 originally_enabled;	/* True if GPE was originally enabled */
 };
 
 /* Notify info for implicit notify, multiple device objects */
drivers/acpi/acpica/evgpe.c +12 -11
index e4ba4de..2095dfb 100644
@@ -100,13 +100,14 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
  *
  * FUNCTION:    acpi_ev_enable_gpe
  *
- * PARAMETERS:  gpe_event_info  - GPE to enable
+ * PARAMETERS:  gpe_event_info          - GPE to enable
  *
  * RETURN:      Status
  *
  * DESCRIPTION: Clear a GPE of stale events and enable it.
  *
  ******************************************************************************/
+
 acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 {
 	acpi_status status;
@@ -125,6 +126,7 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 	}
 
 	/* Clear the GPE (of stale events) */
+
 	status = acpi_hw_clear_gpe(gpe_event_info);
 	if (ACPI_FAILURE(status)) {
 		return_ACPI_STATUS(status);
@@ -136,7 +138,6 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 	return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_add_gpe_reference
@@ -212,7 +213,7 @@ acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info)
 		if (ACPI_SUCCESS(status)) {
 			status =
 			    acpi_hw_low_set_gpe(gpe_event_info,
-						     ACPI_GPE_DISABLE);
+						ACPI_GPE_DISABLE);
 		}
 
 		if (ACPI_FAILURE(status)) {
@@ -334,7 +335,7 @@ struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
  *
  ******************************************************************************/
 
-u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
+u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list)
 {
 	acpi_status status;
 	struct acpi_gpe_block_info *gpe_block;
@@ -427,7 +428,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
 
 			/* Check if there is anything active at all in this register */
 
-			enabled_status_byte = (u8) (status_reg & enable_reg);
+			enabled_status_byte = (u8)(status_reg & enable_reg);
 			if (!enabled_status_byte) {
 
 				/* No active GPEs in this register, move on */
@@ -450,7 +451,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
 					    acpi_ev_gpe_dispatch(gpe_block->
 								 node,
 								 &gpe_block->
-						event_info[((acpi_size) i * ACPI_GPE_REGISTER_WIDTH) + j], j + gpe_register_info->base_gpe_number);
+								 event_info[((acpi_size) i * ACPI_GPE_REGISTER_WIDTH) + j], j + gpe_register_info->base_gpe_number);
 				}
 			}
 		}
@@ -636,7 +637,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;
 
@@ -666,9 +667,9 @@ acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info)
  *
  * FUNCTION:    acpi_ev_gpe_dispatch
  *
- * PARAMETERS:  gpe_device      - Device node. NULL for GPE0/GPE1
- *              gpe_event_info  - Info for this GPE
- *              gpe_number      - Number relative to the parent GPE block
+ * PARAMETERS:  gpe_device          - Device node. NULL for GPE0/GPE1
+ *              gpe_event_info      - Info for this GPE
+ *              gpe_number          - Number relative to the parent GPE block
  *
  * RETURN:      INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
  *
@@ -681,7 +682,7 @@ acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info)
 
 u32
 acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
-		    struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
+		     struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
 {
 	acpi_status status;
 	u32 return_value;
drivers/acpi/acpica/evgpeinit.c +1 -0
index 49fc7ef..7be9283 100644
@@ -424,6 +424,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
 	}
 
 	/* Disable the GPE in case it's been enabled already. */
+
 	(void)acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_DISABLE);
 
 	/*
drivers/acpi/acpica/evxface.c +4 -5
index 11e5803..935fd76 100644
@@ -786,14 +786,13 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
 	handler->method_node = gpe_event_info->dispatch.method_node;
 	handler->original_flags = (u8)(gpe_event_info->flags &
 				       (ACPI_GPE_XRUPT_TYPE_MASK |
-				        ACPI_GPE_DISPATCH_MASK));
+					ACPI_GPE_DISPATCH_MASK));
 
 	/*
 	 * If the GPE is associated with a method, it may have been enabled
 	 * automatically during initialization, in which case it has to be
 	 * disabled now to avoid spurious execution of the handler.
 	 */
-
 	if ((handler->original_flags & ACPI_GPE_DISPATCH_METHOD)
 	    && gpe_event_info->runtime_count) {
 		handler->originally_enabled = 1;
@@ -808,7 +807,7 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
 
 	gpe_event_info->flags &=
 	    ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
-	gpe_event_info->flags |= (u8) (type | ACPI_GPE_DISPATCH_HANDLER);
+	gpe_event_info->flags |= (u8)(type | ACPI_GPE_DISPATCH_HANDLER);
 
 	acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 
@@ -893,7 +892,7 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
 
 	gpe_event_info->dispatch.method_node = handler->method_node;
 	gpe_event_info->flags &=
-		~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
+	    ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);
 	gpe_event_info->flags |= handler->original_flags;
 
 	/*
@@ -946,7 +945,7 @@ ACPI_EXPORT_SYMBOL(acpi_remove_gpe_handler)
  * handle is returned.
  *
  ******************************************************************************/
-acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle)
+acpi_status acpi_acquire_global_lock(u16 timeout, u32 *handle)
 {
 	acpi_status status;
 
drivers/acpi/acpica/evxfgpe.c +4 -5
index 56710a0..2529d3c 100644
@@ -106,8 +106,8 @@ ACPI_EXPORT_SYMBOL(acpi_update_all_gpes)
  *
  * FUNCTION:    acpi_enable_gpe
  *
- * PARAMETERS:  gpe_device      - Parent GPE Device. NULL for GPE0/GPE1
- *              gpe_number      - GPE level within the GPE block
+ * PARAMETERS:  gpe_device          - Parent GPE Device. NULL for GPE0/GPE1
+ *              gpe_number          - GPE level within the GPE block
  *
  * RETURN:      Status
  *
@@ -115,7 +115,6 @@ ACPI_EXPORT_SYMBOL(acpi_update_all_gpes)
  *              hardware-enabled.
  *
  ******************************************************************************/
-
 acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number)
 {
 	acpi_status status = AE_BAD_PARAMETER;
@@ -490,8 +489,8 @@ ACPI_EXPORT_SYMBOL(acpi_clear_gpe)
  *
  * FUNCTION:    acpi_get_gpe_status
  *
- * PARAMETERS:  gpe_device      - Parent GPE Device. NULL for GPE0/GPE1
- *              gpe_number      - GPE level within the GPE block
+ * PARAMETERS:  gpe_device          - Parent GPE Device. NULL for GPE0/GPE1
+ *              gpe_number          - GPE level within the GPE block
  *              event_status        - Where the current status of the event
  *                                    will be returned
  *
drivers/acpi/acpica/hwgpe.c +1 -1
index ea62d40..aa884d4 100644
@@ -202,7 +202,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_event_status * event_status)
+		       acpi_event_status *event_status)
 {
 	u32 in_byte;
 	u32 register_bit;
Signature · 1 line
1.7.10
author
#4 lore raw

PATCH 4/10 ACPICA: Events: Reduce source code difference in acpi_install_gpe_handler().

In reply to Lv Zheng

There is a sanity check in ACPICA upstream, complaining mis-matched interrupt type for originally enabled GPEs that are going to be dispatched by OSPM handlers. This is only a warning message noting developers such conflict between BIOS and OSPM. This patch ports this warning message from ACPICA upstream to reduce source code difference between Linux and ACPICA upstream.

This patch is required before applying a follow-up linuxized event patch in 20140926 release. It also contains one line divergence reduction to make the follow-up change simpler and easier to be maintained.

---
 drivers/acpi/acpica/evxface.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/acpi/acpica/evxface.c +9 -1
index 935fd76..79b6ed2 100644
@@ -795,8 +795,16 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
 	 */
 	if ((handler->original_flags & ACPI_GPE_DISPATCH_METHOD)
 	    && gpe_event_info->runtime_count) {
-		handler->originally_enabled = 1;
+		handler->originally_enabled = TRUE;
 		(void)acpi_ev_remove_gpe_reference(gpe_event_info);
+
+		/* Sanity check of original type against new type */
+
+		if (type !=
+		    (u32)(gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK)) {
+			ACPI_WARNING((AE_INFO,
+				      "GPE type mismatch (level/edge)"));
+		}
 	}
 
 	/* Install the handler */
Signature · 1 line
1.7.10
author
#5 lore raw

PATCH 5/10 ACPICA: Events: Update GPE handler removal, match behavior of handler install.

In reply to Lv Zheng

The originally_enabled check is not paired between acpi_install_gpe_handler() and acpi_remove_gpe_handler().

In ACPICA upstream, there is code to protect original enabled state for ACPI_GPE_DISPATCH_NOTIFY and this commit fixes an issue for this feature. Since this ACPICA commit doesn't contain the code that is already in the ACPICA upstream, the linuxized result has included such code to reduce the source code differences between the Linux and ACPICA upstream. This also allows us to revert this feature as a whole when we see regressions triggered by this feature.

---
 drivers/acpi/acpica/evxface.c |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/acpi/acpica/evxface.c +5 -3
index 79b6ed2..55a58f3 100644
@@ -793,8 +793,9 @@ acpi_install_gpe_handler(acpi_handle gpe_device,
 	 * automatically during initialization, in which case it has to be
 	 * disabled now to avoid spurious execution of the handler.
 	 */
-	if ((handler->original_flags & ACPI_GPE_DISPATCH_METHOD)
-	    && gpe_event_info->runtime_count) {
+	if (((handler->original_flags & ACPI_GPE_DISPATCH_METHOD) ||
+	     (handler->original_flags & ACPI_GPE_DISPATCH_NOTIFY)) &&
+	    gpe_event_info->runtime_count) {
 		handler->originally_enabled = TRUE;
 		(void)acpi_ev_remove_gpe_reference(gpe_event_info);
 
@@ -908,7 +909,8 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
 	 * enabled, it should be enabled at this point to restore the
 	 * post-initialization configuration.
 	 */
-	if ((handler->original_flags & ACPI_GPE_DISPATCH_METHOD) &&
+	if (((handler->original_flags & ACPI_GPE_DISPATCH_METHOD) ||
+	     (handler->original_flags & ACPI_GPE_DISPATCH_NOTIFY)) &&
 	    handler->originally_enabled) {
 		(void)acpi_ev_add_gpe_reference(gpe_event_info);
 	}
Signature · 1 line
1.7.10
author
#6 lore raw

PATCH 6/10 ACPICA: Events: Reduce source code difference for the ACPI_EVENT_FLAG_HANDLE support.

In reply to Lv Zheng

This patch is a partial linuxized result of the following ACPICA commit:
ACPICA commit: a73b66c6aa1846d055bb6390d9c9b9902f7d804d
Subject: Add "has handler" flag to event/gpe status interfaces. This change adds a new flag, ACPI_EVENT_FLAGS_HAS_HANDLER to the acpi_get_event_status and acpi_get_gpe_status external interfaces. It is set if the event/gpe currently has a handler associated with it.
This commit back ports ACPI_EVENT_FLAG_HANDLE from Linux upstream to the ACPICA, the flag along with its support code currently can only be found in the Linux upstream and is used by the ACPI sysfs GPE interfaces and the ACPI bus scanning support.

When the Linux support of ACPI_EVENT_FLAG_HANDLE is back ported to the ACPICA, the following things are changed:
1. The coding style is changed to follow ACPICA preference.
2. The ACPI_EVENT_FLAG_HANDLE is returned from acpi_hw_get_gpe_status() instead of set it after invoking acpi_hw_get_gpe_status().
3. In acpi_get_event_status(), a local variable local_event_status is introduced to make the piece of code similar as acpi_get_gpe_status().
4. The ACPI_EVENT_FLAG_HANDLE is renamed to ACPI_EVENT_FLAG_HAS_HANDLER. When the ACPICA commit is linuxized to form this Linux divergence reduction patch, the following things are changed:
1. The ACPI_EVENT_FLAG_HAS_HANDLER is restored back to ACPI_EVENT_FLAG_HANDLE, the renaming change is split into another patch along with sysfs.c/scan.c updates so that this patch can be a pure ACPICA commit and can be less likely to have conflicts with other commits.

---
 drivers/acpi/acpica/evxfevnt.c |   40 ++++++++++++++++++++++++++--------------
 drivers/acpi/acpica/evxfgpe.c  |    3 ---
 drivers/acpi/acpica/hwgpe.c    |    7 +++++++
 include/acpi/actypes.h         |    4 ++--
 4 files changed, 35 insertions(+), 19 deletions(-)
drivers/acpi/acpica/evxfevnt.c +26 -14
index e286640..a8a077c 100644
@@ -324,8 +324,9 @@ ACPI_EXPORT_SYMBOL(acpi_clear_event)
  ******************************************************************************/
 acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
 {
-	acpi_status status = AE_OK;
-	u32 value;
+	acpi_status status;
+	acpi_event_status local_event_status = 0;
+	u32 in_byte;
 
 	ACPI_FUNCTION_TRACE(acpi_get_event_status);
 
@@ -339,29 +340,40 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
 		return_ACPI_STATUS(AE_BAD_PARAMETER);
 	}
 
-	/* Get the status of the requested fixed event */
+	/* Fixed event currently can be dispatched? */
+
+	if (acpi_gbl_fixed_event_handlers[event].handler) {
+		local_event_status |= ACPI_EVENT_FLAG_HANDLE;
+	}
+
+	/* Fixed event currently enabled? */
 
 	status =
 	    acpi_read_bit_register(acpi_gbl_fixed_event_info[event].
-			      enable_register_id, &value);
-	if (ACPI_FAILURE(status))
+				   enable_register_id, &in_byte);
+	if (ACPI_FAILURE(status)) {
 		return_ACPI_STATUS(status);
+	}
 
-	*event_status = value;
+	if (in_byte) {
+		local_event_status |= ACPI_EVENT_FLAG_ENABLED;
+	}
+
+	/* Fixed event currently active? */
 
 	status =
 	    acpi_read_bit_register(acpi_gbl_fixed_event_info[event].
-			      status_register_id, &value);
-	if (ACPI_FAILURE(status))
+				   status_register_id, &in_byte);
+	if (ACPI_FAILURE(status)) {
 		return_ACPI_STATUS(status);
+	}
 
-	if (value)
-		*event_status |= ACPI_EVENT_FLAG_SET;
-
-	if (acpi_gbl_fixed_event_handlers[event].handler)
-		*event_status |= ACPI_EVENT_FLAG_HANDLE;
+	if (in_byte) {
+		local_event_status |= ACPI_EVENT_FLAG_SET;
+	}
 
-	return_ACPI_STATUS(status);
+	(*event_status) = local_event_status;
+	return_ACPI_STATUS(AE_OK);
 }
 
 ACPI_EXPORT_SYMBOL(acpi_get_event_status)
drivers/acpi/acpica/evxfgpe.c +0 -3
index 2529d3c..e889a53 100644
@@ -523,9 +523,6 @@ acpi_get_gpe_status(acpi_handle gpe_device,
 
 	status = acpi_hw_get_gpe_status(gpe_event_info, event_status);
 
-	if (gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK)
-		*event_status |= ACPI_EVENT_FLAG_HANDLE;
-
 unlock_and_exit:
 	acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 	return_ACPI_STATUS(status);
drivers/acpi/acpica/hwgpe.c +7 -0
index aa884d4..0302bc3 100644
@@ -216,6 +216,13 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
 		return (AE_BAD_PARAMETER);
 	}
 
+	/* GPE currently handled? */
+
+	if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) !=
+	    ACPI_GPE_DISPATCH_NONE) {
+		local_event_status |= ACPI_EVENT_FLAG_HANDLE;
+	}
+
 	/* Get the info block for the entire GPE register */
 
 	gpe_register_info = gpe_event_info->register_info;
include/acpi/actypes.h +2 -2
index ac03ec8..857830d 100644
@@ -721,7 +721,7 @@ typedef u32 acpi_event_type;
  *          |     | | +--- Enabled for wake?
  *          |     | +----- Set?
  *          |     +------- Has a handler?
- *          +----------- <Reserved>
+ *          +------------- <Reserved>
  */
 typedef u32 acpi_event_status;
 
@@ -729,7 +729,7 @@ typedef u32 acpi_event_status;
 #define ACPI_EVENT_FLAG_ENABLED         (acpi_event_status) 0x01
 #define ACPI_EVENT_FLAG_WAKE_ENABLED    (acpi_event_status) 0x02
 #define ACPI_EVENT_FLAG_SET             (acpi_event_status) 0x04
-#define ACPI_EVENT_FLAG_HANDLE		(acpi_event_status) 0x08
+#define ACPI_EVENT_FLAG_HANDLE          (acpi_event_status) 0x08
 
 /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
 
Signature · 1 line
1.7.10
author
#7 lore raw

PATCH 7/10 ACPICA: Events: Reduce source code difference for the ACPI_EVENT_FLAG_HANDLE renaming.

In reply to Lv Zheng

This patch is a partial linuxized result of the following ACPICA commit:
ACPICA commit: a73b66c6aa1846d055bb6390d9c9b9902f7d804d
Subject: Add "has handler" flag to event/gpe status interfaces. This change adds a new flag, ACPI_EVENT_FLAGS_HAS_HANDLER to the acpi_get_event_status and acpi_get_gpe_status external interfaces. It is set if the event/gpe currently has a handler associated with it.
This patch contains the code to rename ACPI_EVENT_FLAG_HANDLE to ACPI_EVENT_FLAG_HAS_HANDLER, and the corresponding updates of its usages.

---
 drivers/acpi/acpica/evxfevnt.c |    2 +-
 drivers/acpi/acpica/hwgpe.c    |    2 +-
 drivers/acpi/scan.c            |    2 +-
 drivers/acpi/sysfs.c           |    4 ++--
 include/acpi/actypes.h         |    2 +-
 5 files changed, 6 insertions(+), 6 deletions(-)
drivers/acpi/acpica/evxfevnt.c +1 -1
index a8a077c..bb8cbf5 100644
@@ -343,7 +343,7 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
 	/* Fixed event currently can be dispatched? */
 
 	if (acpi_gbl_fixed_event_handlers[event].handler) {
-		local_event_status |= ACPI_EVENT_FLAG_HANDLE;
+		local_event_status |= ACPI_EVENT_FLAG_HAS_HANDLER;
 	}
 
 	/* Fixed event currently enabled? */
drivers/acpi/acpica/hwgpe.c +1 -1
index 0302bc3..48ac7b7 100644
@@ -220,7 +220,7 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
 
 	if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) !=
 	    ACPI_GPE_DISPATCH_NONE) {
-		local_event_status |= ACPI_EVENT_FLAG_HANDLE;
+		local_event_status |= ACPI_EVENT_FLAG_HAS_HANDLER;
 	}
 
 	/* Get the info block for the entire GPE register */
drivers/acpi/scan.c +1 -1
index ae44d86..f1d96e7 100644
@@ -1470,7 +1470,7 @@ static void acpi_wakeup_gpe_init(struct acpi_device *device)
 	if (ACPI_FAILURE(status))
 		return;
 
-	wakeup->flags.run_wake = !!(event_status & ACPI_EVENT_FLAG_HANDLE);
+	wakeup->flags.run_wake = !!(event_status & ACPI_EVENT_FLAG_HAS_HANDLER);
 }
 
 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
drivers/acpi/sysfs.c +2 -2
index 38cb978..13e577c 100644
@@ -537,7 +537,7 @@ static ssize_t counter_show(struct kobject *kobj,
 	if (result)
 		goto end;
 
-	if (!(status & ACPI_EVENT_FLAG_HANDLE))
+	if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER))
 		size += sprintf(buf + size, "   invalid");
 	else if (status & ACPI_EVENT_FLAG_ENABLED)
 		size += sprintf(buf + size, "   enabled");
@@ -581,7 +581,7 @@ static ssize_t counter_set(struct kobject *kobj,
 	if (result)
 		goto end;
 
-	if (!(status & ACPI_EVENT_FLAG_HANDLE)) {
+	if (!(status & ACPI_EVENT_FLAG_HAS_HANDLER)) {
 		printk(KERN_WARNING PREFIX
 		       "Can not change Invalid GPE/Fixed Event status\n");
 		return -EINVAL;
include/acpi/actypes.h +1 -1
index 857830d..7000e66 100644
@@ -729,7 +729,7 @@ typedef u32 acpi_event_status;
 #define ACPI_EVENT_FLAG_ENABLED         (acpi_event_status) 0x01
 #define ACPI_EVENT_FLAG_WAKE_ENABLED    (acpi_event_status) 0x02
 #define ACPI_EVENT_FLAG_SET             (acpi_event_status) 0x04
-#define ACPI_EVENT_FLAG_HANDLE          (acpi_event_status) 0x08
+#define ACPI_EVENT_FLAG_HAS_HANDLER     (acpi_event_status) 0x08
 
 /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
 
Signature · 1 line
1.7.10
author
#8 lore raw

PATCH 8/10 ACPICA: iASL/Disassembler: Add support for hardware summary mapfiles.

In reply to Lv Zheng

From: Bob Moore <[email protected]>

Adds support for both iASL and the disassembler to create a hardware and connection summary mapfile (via the -lm option.)

Linux isn't affected by this patch because iASL is not in the Linux upstream.

---
 drivers/acpi/acpica/amlresrc.h |   34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
drivers/acpi/acpica/amlresrc.h +34 -0
index f3f8344..3a0beeb 100644
@@ -117,6 +117,12 @@ struct asl_resource_node {
 	struct asl_resource_node *next;
 };
 
+struct asl_resource_info {
+	union acpi_parse_object *descriptor_type_op;	/* Resource descriptor parse node */
+	union acpi_parse_object *mapping_op;	/* Used for mapfile support */
+	u32 current_byte_offset;	/* Offset in resource template */
+};
+
 /* Macros used to generate AML resource length fields */
 
 #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
@@ -449,4 +455,32 @@ union aml_resource {
 	u8 byte_item;
 };
 
+/* Interfaces used by both the disassembler and compiler */
+
+void
+mp_save_gpio_info(union acpi_parse_object *op,
+		  union aml_resource *resource,
+		  u32 pin_count, u16 *pin_list, char *device_name);
+
+void
+mp_save_serial_info(union acpi_parse_object *op,
+		    union aml_resource *resource, char *device_name);
+
+char *mp_get_hid_from_parse_tree(struct acpi_namespace_node *hid_node);
+
+char *mp_get_hid_via_namestring(char *device_name);
+
+char *mp_get_connection_info(union acpi_parse_object *op,
+			     u32 pin_index,
+			     struct acpi_namespace_node **target_node,
+			     char **target_name);
+
+char *mp_get_parent_device_hid(union acpi_parse_object *op,
+			       struct acpi_namespace_node **target_node,
+			       char **parent_device_name);
+
+char *mp_get_ddn_value(char *device_name);
+
+char *mp_get_hid_value(struct acpi_namespace_node *device_node);
+
 #endif
Signature · 1 line
1.7.10
author
#9 lore raw

PATCH 9/10 ACPICA: acpiexec: Do not put STDIN into raw mode unless it is a terminal.

In reply to Lv Zheng

From: Bob Moore <[email protected]>

Eliminate an error message for batch-mode processing on unix systems. ACPICA BZ 1114.

This patch is mainly for fixing the issues of acpiexec which is not in the Linux upstream.

---
 tools/power/acpi/os_specific/service_layers/osunixxf.c |    8 ++++++++
 1 file changed, 8 insertions(+)
tools/power/acpi/os_specific/service_layers/osunixxf.c +8 -0
index 60b58cd..7ccb073 100644
@@ -122,6 +122,14 @@ static void os_enter_line_edit_mode(void)
 {
 	struct termios local_term_attributes;
 
+	term_attributes_were_set = 0;
+
+	/* STDIN must be a terminal */
+
+	if (!isatty(STDIN_FILENO)) {
+		return;
+	}
+
 	/* Get and keep the original attributes */
 
 	if (tcgetattr(STDIN_FILENO, &original_term_attributes)) {
Signature · 1 line
1.7.10
author
#10 lore raw

PATCH 10/10 ACPICA: Update version to 20140926.

In reply to Lv Zheng

From: Bob Moore <[email protected]>

Version 20140926.

---
 include/acpi/acpixf.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
include/acpi/acpixf.h +1 -1
index 9fc1d71..ab2acf6 100644
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20140828
+#define ACPI_CA_VERSION                 0x20140926
 
 #include <acpi/acconfig.h>
 #include <acpi/actypes.h>
Signature · 1 line
1.7.10
#11 lore raw
In reply to Lv Zheng
Quoted 69 lines · Lv Zheng

The 20140926 ACPICA kernel-resident subsystem updates are linuxized based on the pm/linux-next branch to form this patchset.

The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. i386 + allyes + CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes + CONFIG_ACPI=n
5. x86_64 + default + COFNIG_ACPI=y
6. x86_64 + allyes + CONFIG_ACPI=y
7. x86_64 + default + COFNIG_ACPI=n
8. x86_64 + allyes + CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. x86_64 + default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All drivers/acpi configurations
All platform drivers

The divergences checking result:
Before applying (20140828 Release):
848 lines (962 lines)
After applying (20140926 Release):
852 lines
PS:
1. The indication of 710 lines in the last release cover has wrongly included unmerged divergence reductions, it should be 848 lines.
2. The indication of 852 lines shows an increment of divergence by applying this release, this is actually because there is a new API acpi_enable_all_wakeup_gpes() introduced in the recent linux-pm branch that hasn't been back ported to the ACPICA upstream yet. If this is included for re-counting 20140828 release, the 848 lines should be 962 lines. So this release has reduced 110 lines of divergence.

Bob Moore (4):
ACPICA: Add string for _DDN method name.
ACPICA: iASL/Disassembler: Add support for hardware summary mapfiles.
ACPICA: acpiexec: Do not put STDIN into raw mode unless it is a
terminal.
ACPICA: Update version to 20140926.

Lv Zheng (6):
ACPICA: acpidump: Add ACPI 1.0 RSDP support.
ACPICA: Events: Reduce indent divergences of events files.
ACPICA: Events: Reduce source code difference in
acpi_install_gpe_handler().
ACPICA: Events: Update GPE handler removal, match behavior of handler
install.
ACPICA: Events: Reduce source code difference for the
ACPI_EVENT_FLAG_HANDLE support.
ACPICA: Events: Reduce source code difference for the
ACPI_EVENT_FLAG_HANDLE renaming.

 drivers/acpi/acpica/achware.h                      |    2 +-
 drivers/acpi/acpica/aclocal.h                      |    4 +-
 drivers/acpi/acpica/actables.h                     |    2 +
 drivers/acpi/acpica/amlresrc.h                     |   34 +++++++++++++++++
 drivers/acpi/acpica/evgpe.c                        |   23 +++++------
 drivers/acpi/acpica/evgpeinit.c                    |    1 +
 drivers/acpi/acpica/evxface.c                      |   27 ++++++++-----
 drivers/acpi/acpica/evxfevnt.c                     |   40 +++++++++++++-------
 drivers/acpi/acpica/evxfgpe.c                      |   12 ++----
 drivers/acpi/acpica/hwgpe.c                        |    9 ++++-
 drivers/acpi/acpica/tbxfroot.c                     |   33 +++++++++++++++-
Quoted 8 lines
 drivers/acpi/scan.c                                |    2 +-
 drivers/acpi/sysfs.c                               |    4 +-
 include/acpi/acnames.h                             |    1 +
 include/acpi/acpixf.h                              |    2 +-
 include/acpi/actypes.h                             |    4 +-
 .../acpi/os_specific/service_layers/osunixxf.c     |    8 ++++
 tools/power/acpi/tools/acpidump/apdump.c           |    2 +-
 18 files changed, 156 insertions(+), 54 deletions(-)

Whole series applied, thanks Lv!