All of lore.kernel.org
 help / color / mirror / Atom feed
From: Len Brown <lenb@kernel.org>
To: linux-acpi@vger.kernel.org
Cc: Mikhail Kouzmich <mikhail.v.kouzmich@intel.com>,
	Bob Moore <robert.moore@intel.com>,
	Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>,
	Len Brown <len.brown@intel.com>
Subject: [PATCH 90/140] ACPICA: Restructured module into multiple functions.
Date: Wed,  7 Feb 2007 13:51:44 -0500	[thread overview]
Message-ID: <1170874504414-git-send-email-lenb@kernel.org> (raw)
In-Reply-To: <11708745032987-git-send-email-lenb@kernel.org>
In-Reply-To: <9e89dde2b063ca73fcdc9244fe68e2dea32c5088.1170873816.git.len.brown@intel.com>

From: Mikhail Kouzmich <mikhail.v.kouzmich@intel.com>

Restructured the AML ParseLoop function, breaking it into several
subfunctions in order to reduce CPU stack use and improve maintainability

Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
---
 drivers/acpi/parser/psloop.c | 1406 +++++++++++++++++++++++-------------------
 include/acpi/acexcep.h       |    8 +-
 2 files changed, 789 insertions(+), 625 deletions(-)

diff --git a/drivers/acpi/parser/psloop.c b/drivers/acpi/parser/psloop.c
index e1541db..a83be52 100644
--- a/drivers/acpi/parser/psloop.c
+++ b/drivers/acpi/parser/psloop.c
@@ -42,12 +42,11 @@
  */
 
 /*
- * Parse the AML and build an operation tree as most interpreters,
- * like Perl, do.  Parsing is done by hand rather than with a YACC
- * generated parser to tightly constrain stack and dynamic memory
- * usage.  At the same time, parsing is kept flexible and the code
- * fairly compact by parsing based on a list of AML opcode
- * templates in aml_op_info[]
+ * Parse the AML and build an operation tree as most interpreters, (such as
+ * Perl) do. Parsing is done by hand rather than with a YACC generated parser
+ * to tightly constrain stack and dynamic memory usage. Parsing is kept
+ * flexible and the code fairly compact by parsing based on a list of AML
+ * opcode templates in aml_op_info[].
  */
 
 #include <acpi/acpi.h>
@@ -60,766 +59,679 @@ ACPI_MODULE_NAME("psloop")
 
 static u32 acpi_gbl_depth = 0;
 
+/* Local prototypes */
+
+static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state);
+
+static acpi_status
+acpi_ps_build_named_op(struct acpi_walk_state *walk_state,
+		       u8 * aml_op_start,
+		       union acpi_parse_object *unnamed_op,
+		       union acpi_parse_object **op);
+
+static acpi_status
+acpi_ps_create_op(struct acpi_walk_state *walk_state,
+		  u8 * aml_op_start, union acpi_parse_object **new_op);
+
+static acpi_status
+acpi_ps_get_arguments(struct acpi_walk_state *walk_state,
+		      u8 * aml_op_start, union acpi_parse_object *op);
+
+static acpi_status
+acpi_ps_complete_op(struct acpi_walk_state *walk_state,
+		    union acpi_parse_object **op, acpi_status status);
+
+static acpi_status
+acpi_ps_complete_final_op(struct acpi_walk_state *walk_state,
+			  union acpi_parse_object *op, acpi_status status);
+
 /*******************************************************************************
  *
- * FUNCTION:    acpi_ps_parse_loop
+ * FUNCTION:    acpi_ps_get_aml_opcode
  *
  * PARAMETERS:  walk_state          - Current state
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Parse AML (pointed to by the current parser state) and return
- *              a tree of ops.
+ * DESCRIPTION: Extract the next AML opcode from the input stream.
  *
  ******************************************************************************/
 
-acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
+static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
 {
-	acpi_status status = AE_OK;
-	acpi_status status2;
-	union acpi_parse_object *op = NULL;	/* current op */
-	union acpi_parse_object *arg = NULL;
-	union acpi_parse_object *pre_op = NULL;
-	struct acpi_parse_state *parser_state;
-	u8 *aml_op_start = NULL;
 
-	ACPI_FUNCTION_TRACE_PTR(ps_parse_loop, walk_state);
+	ACPI_FUNCTION_TRACE_PTR(ps_get_aml_opcode, walk_state);
 
-	if (walk_state->descending_callback == NULL) {
-		return_ACPI_STATUS(AE_BAD_PARAMETER);
-	}
+	walk_state->aml_offset =
+	    (u32) ACPI_PTR_DIFF(walk_state->parser_state.aml,
+				walk_state->parser_state.aml_start);
+	walk_state->opcode = acpi_ps_peek_opcode(&(walk_state->parser_state));
 
-	parser_state = &walk_state->parser_state;
-	walk_state->arg_types = 0;
+	/*
+	 * First cut to determine what we have found:
+	 * 1) A valid AML opcode
+	 * 2) A name string
+	 * 3) An unknown/invalid opcode
+	 */
+	walk_state->op_info = acpi_ps_get_opcode_info(walk_state->opcode);
 
-#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
+	switch (walk_state->op_info->class) {
+	case AML_CLASS_ASCII:
+	case AML_CLASS_PREFIX:
+		/*
+		 * Starts with a valid prefix or ASCII char, this is a name
+		 * string. Convert the bare name string to a namepath.
+		 */
+		walk_state->opcode = AML_INT_NAMEPATH_OP;
+		walk_state->arg_types = ARGP_NAMESTRING;
+		break;
 
-	if (walk_state->walk_type & ACPI_WALK_METHOD_RESTART) {
+	case AML_CLASS_UNKNOWN:
 
-		/* We are restarting a preempted control method */
+		/* The opcode is unrecognized. Just skip unknown opcodes */
 
-		if (acpi_ps_has_completed_scope(parser_state)) {
-			/*
-			 * We must check if a predicate to an IF or WHILE statement
-			 * was just completed
-			 */
-			if ((parser_state->scope->parse_scope.op) &&
-			    ((parser_state->scope->parse_scope.op->common.
-			      aml_opcode == AML_IF_OP)
-			     || (parser_state->scope->parse_scope.op->common.
-				 aml_opcode == AML_WHILE_OP))
-			    && (walk_state->control_state)
-			    && (walk_state->control_state->common.state ==
-				ACPI_CONTROL_PREDICATE_EXECUTING)) {
-				/*
-				 * A predicate was just completed, get the value of the
-				 * predicate and branch based on that value
-				 */
-				walk_state->op = NULL;
-				status =
-				    acpi_ds_get_predicate_value(walk_state,
-								ACPI_TO_POINTER
-								(TRUE));
-				if (ACPI_FAILURE(status)
-				    && ((status & AE_CODE_MASK) !=
-					AE_CODE_CONTROL)) {
-					if (status == AE_AML_NO_RETURN_VALUE) {
-						ACPI_EXCEPTION((AE_INFO, status,
-								"Invoked method did not return a value"));
+		ACPI_ERROR((AE_INFO,
+			    "Found unknown opcode %X at AML address %p offset %X, ignoring",
+			    walk_state->opcode, walk_state->parser_state.aml,
+			    walk_state->aml_offset));
 
-					}
-					ACPI_EXCEPTION((AE_INFO, status,
-							"GetPredicate Failed"));
-					return_ACPI_STATUS(status);
-				}
+		ACPI_DUMP_BUFFER(walk_state->parser_state.aml, 128);
 
-				status =
-				    acpi_ps_next_parse_state(walk_state, op,
-							     status);
-			}
+		/* Assume one-byte bad opcode */
 
-			acpi_ps_pop_scope(parser_state, &op,
-					  &walk_state->arg_types,
-					  &walk_state->arg_count);
-			ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
-					  "Popped scope, Op=%p\n", op));
-		} else if (walk_state->prev_op) {
+		walk_state->parser_state.aml++;
+		return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
 
-			/* We were in the middle of an op */
+	default:
 
-			op = walk_state->prev_op;
-			walk_state->arg_types = walk_state->prev_arg_types;
-		}
+		/* Found opcode info, this is a normal opcode */
+
+		walk_state->parser_state.aml +=
+		    acpi_ps_get_opcode_size(walk_state->opcode);
+		walk_state->arg_types = walk_state->op_info->parse_args;
+		break;
 	}
-#endif
 
-	/* Iterative parsing loop, while there is more AML to process: */
+	return_ACPI_STATUS(AE_OK);
+}
 
-	while ((parser_state->aml < parser_state->aml_end) || (op)) {
-		aml_op_start = parser_state->aml;
-		if (!op) {
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_build_named_op
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *              aml_op_start        - Begin of named Op in AML
+ *              unnamed_op          - Early Op (not a named Op)
+ *              Op                  - Returned Op
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Parse a named Op
+ *
+ ******************************************************************************/
 
-			/* Get the next opcode from the AML stream */
+static acpi_status
+acpi_ps_build_named_op(struct acpi_walk_state *walk_state,
+		       u8 * aml_op_start,
+		       union acpi_parse_object *unnamed_op,
+		       union acpi_parse_object **op)
+{
+	acpi_status status = AE_OK;
+	union acpi_parse_object *arg = NULL;
 
-			walk_state->aml_offset =
-			    (u32) ACPI_PTR_DIFF(parser_state->aml,
-						parser_state->aml_start);
-			walk_state->opcode = acpi_ps_peek_opcode(parser_state);
+	ACPI_FUNCTION_TRACE_PTR(ps_build_named_op, walk_state);
 
-			/*
-			 * First cut to determine what we have found:
-			 * 1) A valid AML opcode
-			 * 2) A name string
-			 * 3) An unknown/invalid opcode
-			 */
-			walk_state->op_info =
-			    acpi_ps_get_opcode_info(walk_state->opcode);
-			switch (walk_state->op_info->class) {
-			case AML_CLASS_ASCII:
-			case AML_CLASS_PREFIX:
-				/*
-				 * Starts with a valid prefix or ASCII char, this is a name
-				 * string.  Convert the bare name string to a namepath.
-				 */
-				walk_state->opcode = AML_INT_NAMEPATH_OP;
-				walk_state->arg_types = ARGP_NAMESTRING;
-				break;
+	unnamed_op->common.value.arg = NULL;
+	unnamed_op->common.aml_opcode = walk_state->opcode;
 
-			case AML_CLASS_UNKNOWN:
+	/*
+	 * Get and append arguments until we find the node that contains
+	 * the name (the type ARGP_NAME).
+	 */
+	while (GET_CURRENT_ARG_TYPE(walk_state->arg_types) &&
+	       (GET_CURRENT_ARG_TYPE(walk_state->arg_types) != ARGP_NAME)) {
+		status =
+		    acpi_ps_get_next_arg(walk_state,
+					 &(walk_state->parser_state),
+					 GET_CURRENT_ARG_TYPE(walk_state->
+							      arg_types), &arg);
+		if (ACPI_FAILURE(status)) {
+			return_ACPI_STATUS(status);
+		}
 
-				/* The opcode is unrecognized.  Just skip unknown opcodes */
+		acpi_ps_append_arg(unnamed_op, arg);
+		INCREMENT_ARG_LIST(walk_state->arg_types);
+	}
 
-				ACPI_ERROR((AE_INFO,
-					    "Found unknown opcode %X at AML address %p offset %X, ignoring",
-					    walk_state->opcode,
-					    parser_state->aml,
-					    walk_state->aml_offset));
+	/*
+	 * Make sure that we found a NAME and didn't run out of arguments
+	 */
+	if (!GET_CURRENT_ARG_TYPE(walk_state->arg_types)) {
+		return_ACPI_STATUS(AE_AML_NO_OPERAND);
+	}
 
-				ACPI_DUMP_BUFFER(parser_state->aml, 128);
+	/* We know that this arg is a name, move to next arg */
 
-				/* Assume one-byte bad opcode */
+	INCREMENT_ARG_LIST(walk_state->arg_types);
 
-				parser_state->aml++;
-				continue;
+	/*
+	 * Find the object. This will either insert the object into
+	 * the namespace or simply look it up
+	 */
+	walk_state->op = NULL;
 
-			default:
+	status = walk_state->descending_callback(walk_state, op);
+	if (ACPI_FAILURE(status)) {
+		ACPI_EXCEPTION((AE_INFO, status, "During name lookup/catalog"));
+		return_ACPI_STATUS(status);
+	}
 
-				/* Found opcode info, this is a normal opcode */
+	if (!op) {
+		return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
+	}
 
-				parser_state->aml +=
-				    acpi_ps_get_opcode_size(walk_state->opcode);
-				walk_state->arg_types =
-				    walk_state->op_info->parse_args;
-				break;
-			}
+	status = acpi_ps_next_parse_state(walk_state, *op, status);
+	if (ACPI_FAILURE(status)) {
+		if (status == AE_CTRL_PENDING) {
+			return_ACPI_STATUS(AE_CTRL_PARSE_PENDING);
+		}
+		return_ACPI_STATUS(status);
+	}
 
-			/* Create Op structure and append to parent's argument list */
+	acpi_ps_append_arg(*op, unnamed_op->common.value.arg);
+	acpi_gbl_depth++;
 
-			if (walk_state->op_info->flags & AML_NAMED) {
+	if ((*op)->common.aml_opcode == AML_REGION_OP) {
+		/*
+		 * Defer final parsing of an operation_region body, because we don't
+		 * have enough info in the first pass to parse it correctly (i.e.,
+		 * there may be method calls within the term_arg elements of the body.)
+		 *
+		 * However, we must continue parsing because the opregion is not a
+		 * standalone package -- we don't know where the end is at this point.
+		 *
+		 * (Length is unknown until parse of the body complete)
+		 */
+		(*op)->named.data = aml_op_start;
+		(*op)->named.length = 0;
+	}
 
-				/* Allocate a new pre_op if necessary */
+	return_ACPI_STATUS(AE_OK);
+}
 
-				if (!pre_op) {
-					pre_op =
-					    acpi_ps_alloc_op(walk_state->
-							     opcode);
-					if (!pre_op) {
-						status = AE_NO_MEMORY;
-						goto close_this_op;
-					}
-				}
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_create_op
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *              aml_op_start        - Op start in AML
+ *              new_op              - Returned Op
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Get Op from AML
+ *
+ ******************************************************************************/
 
-				pre_op->common.value.arg = NULL;
-				pre_op->common.aml_opcode = walk_state->opcode;
+static acpi_status
+acpi_ps_create_op(struct acpi_walk_state *walk_state,
+		  u8 * aml_op_start, union acpi_parse_object **new_op)
+{
+	acpi_status status = AE_OK;
+	union acpi_parse_object *op;
+	union acpi_parse_object *named_op = NULL;
 
-				/*
-				 * Get and append arguments until we find the node that contains
-				 * the name (the type ARGP_NAME).
-				 */
-				while (GET_CURRENT_ARG_TYPE
-				       (walk_state->arg_types)
-				       &&
-				       (GET_CURRENT_ARG_TYPE
-					(walk_state->arg_types) != ARGP_NAME)) {
-					status =
-					    acpi_ps_get_next_arg(walk_state,
-								 parser_state,
-								 GET_CURRENT_ARG_TYPE
-								 (walk_state->
-								  arg_types),
-								 &arg);
-					if (ACPI_FAILURE(status)) {
-						goto close_this_op;
-					}
+	ACPI_FUNCTION_TRACE_PTR(ps_create_op, walk_state);
 
-					acpi_ps_append_arg(pre_op, arg);
-					INCREMENT_ARG_LIST(walk_state->
-							   arg_types);
-				}
+	status = acpi_ps_get_aml_opcode(walk_state);
+	if (status == AE_CTRL_PARSE_CONTINUE) {
+		return_ACPI_STATUS(AE_CTRL_PARSE_CONTINUE);
+	}
 
-				/*
-				 * Make sure that we found a NAME and didn't run out of
-				 * arguments
-				 */
-				if (!GET_CURRENT_ARG_TYPE
-				    (walk_state->arg_types)) {
-					status = AE_AML_NO_OPERAND;
-					goto close_this_op;
-				}
+	/* Create Op structure and append to parent's argument list */
 
-				/* We know that this arg is a name, move to next arg */
+	walk_state->op_info = acpi_ps_get_opcode_info(walk_state->opcode);
+	op = acpi_ps_alloc_op(walk_state->opcode);
+	if (!op) {
+		return_ACPI_STATUS(AE_NO_MEMORY);
+	}
 
-				INCREMENT_ARG_LIST(walk_state->arg_types);
+	if (walk_state->op_info->flags & AML_NAMED) {
+		status =
+		    acpi_ps_build_named_op(walk_state, aml_op_start, op,
+					   &named_op);
+		acpi_ps_free_op(op);
+		if (ACPI_FAILURE(status)) {
+			return_ACPI_STATUS(status);
+		}
 
-				/*
-				 * Find the object.  This will either insert the object into
-				 * the namespace or simply look it up
-				 */
-				walk_state->op = NULL;
+		*new_op = named_op;
+		return_ACPI_STATUS(AE_OK);
+	}
 
-				status =
-				    walk_state->descending_callback(walk_state,
-								    &op);
-				if (ACPI_FAILURE(status)) {
-					ACPI_EXCEPTION((AE_INFO, status,
-							"During name lookup/catalog"));
-					goto close_this_op;
-				}
+	/* Not a named opcode, just allocate Op and append to parent */
 
-				if (!op) {
-					continue;
-				}
+	if (walk_state->op_info->flags & AML_CREATE) {
+		/*
+		 * Backup to beginning of create_xXXfield declaration
+		 * body_length is unknown until we parse the body
+		 */
+		op->named.data = aml_op_start;
+		op->named.length = 0;
+	}
 
-				status =
-				    acpi_ps_next_parse_state(walk_state, op,
-							     status);
-				if (status == AE_CTRL_PENDING) {
-					status = AE_OK;
-					goto close_this_op;
-				}
+	acpi_ps_append_arg(acpi_ps_get_parent_scope
+			   (&(walk_state->parser_state)), op);
 
-				if (ACPI_FAILURE(status)) {
-					goto close_this_op;
-				}
+	if (walk_state->descending_callback != NULL) {
+		/*
+		 * Find the object. This will either insert the object into
+		 * the namespace or simply look it up
+		 */
+		walk_state->op = *new_op = op;
 
-				acpi_ps_append_arg(op,
-						   pre_op->common.value.arg);
-				acpi_gbl_depth++;
-
-				if (op->common.aml_opcode == AML_REGION_OP) {
-					/*
-					 * Defer final parsing of an operation_region body,
-					 * because we don't have enough info in the first pass
-					 * to parse it correctly (i.e., there may be method
-					 * calls within the term_arg elements of the body.)
-					 *
-					 * However, we must continue parsing because
-					 * the opregion is not a standalone package --
-					 * we don't know where the end is at this point.
-					 *
-					 * (Length is unknown until parse of the body complete)
-					 */
-					op->named.data = aml_op_start;
-					op->named.length = 0;
-				}
-			} else {
-				/* Not a named opcode, just allocate Op and append to parent */
+		status = walk_state->descending_callback(walk_state, &op);
+		status = acpi_ps_next_parse_state(walk_state, op, status);
+		if (status == AE_CTRL_PENDING) {
+			status = AE_CTRL_PARSE_PENDING;
+		}
+	}
 
-				walk_state->op_info =
-				    acpi_ps_get_opcode_info(walk_state->opcode);
-				op = acpi_ps_alloc_op(walk_state->opcode);
-				if (!op) {
-					status = AE_NO_MEMORY;
-					goto close_this_op;
-				}
+	return_ACPI_STATUS(status);
+}
 
-				if (walk_state->op_info->flags & AML_CREATE) {
-					/*
-					 * Backup to beginning of create_xXXfield declaration
-					 * body_length is unknown until we parse the body
-					 */
-					op->named.data = aml_op_start;
-					op->named.length = 0;
-				}
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_get_arguments
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *              aml_op_start        - Op start in AML
+ *              Op                  - Current Op
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Get arguments for passed Op.
+ *
+ ******************************************************************************/
 
-				acpi_ps_append_arg(acpi_ps_get_parent_scope
-						   (parser_state), op);
+static acpi_status
+acpi_ps_get_arguments(struct acpi_walk_state *walk_state,
+		      u8 * aml_op_start, union acpi_parse_object *op)
+{
+	acpi_status status = AE_OK;
+	union acpi_parse_object *arg = NULL;
 
-				if ((walk_state->descending_callback != NULL)) {
-					/*
-					 * Find the object. This will either insert the object into
-					 * the namespace or simply look it up
-					 */
-					walk_state->op = op;
+	ACPI_FUNCTION_TRACE_PTR(ps_get_arguments, walk_state);
 
-					status =
-					    walk_state->
-					    descending_callback(walk_state,
-								&op);
-					status =
-					    acpi_ps_next_parse_state(walk_state,
-								     op,
-								     status);
-					if (status == AE_CTRL_PENDING) {
-						status = AE_OK;
-						goto close_this_op;
-					}
+	switch (op->common.aml_opcode) {
+	case AML_BYTE_OP:	/* AML_BYTEDATA_ARG */
+	case AML_WORD_OP:	/* AML_WORDDATA_ARG */
+	case AML_DWORD_OP:	/* AML_DWORDATA_ARG */
+	case AML_QWORD_OP:	/* AML_QWORDATA_ARG */
+	case AML_STRING_OP:	/* AML_ASCIICHARLIST_ARG */
 
-					if (ACPI_FAILURE(status)) {
-						goto close_this_op;
-					}
-				}
-			}
+		/* Fill in constant or string argument directly */
 
-			op->common.aml_offset = walk_state->aml_offset;
+		acpi_ps_get_next_simple_arg(&(walk_state->parser_state),
+					    GET_CURRENT_ARG_TYPE(walk_state->
+								 arg_types),
+					    op);
+		break;
 
-			if (walk_state->op_info) {
-				ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
-						  "Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X\n",
-						  (u32) op->common.aml_opcode,
-						  walk_state->op_info->name, op,
-						  parser_state->aml,
-						  op->common.aml_offset));
-			}
+	case AML_INT_NAMEPATH_OP:	/* AML_NAMESTRING_ARG */
+
+		status =
+		    acpi_ps_get_next_namepath(walk_state,
+					      &(walk_state->parser_state), op,
+					      1);
+		if (ACPI_FAILURE(status)) {
+			return_ACPI_STATUS(status);
 		}
 
+		walk_state->arg_types = 0;
+		break;
+
+	default:
 		/*
-		 * Start arg_count at zero because we don't know if there are
-		 * any args yet
+		 * Op is not a constant or string, append each argument to the Op
 		 */
-		walk_state->arg_count = 0;
-
-		/* Are there any arguments that must be processed? */
-
-		if (walk_state->arg_types) {
-
-			/* Get arguments */
-
-			switch (op->common.aml_opcode) {
-			case AML_BYTE_OP:	/* AML_BYTEDATA_ARG */
-			case AML_WORD_OP:	/* AML_WORDDATA_ARG */
-			case AML_DWORD_OP:	/* AML_DWORDATA_ARG */
-			case AML_QWORD_OP:	/* AML_QWORDATA_ARG */
-			case AML_STRING_OP:	/* AML_ASCIICHARLIST_ARG */
-
-				/* Fill in constant or string argument directly */
-
-				acpi_ps_get_next_simple_arg(parser_state,
-							    GET_CURRENT_ARG_TYPE
-							    (walk_state->
-							     arg_types), op);
-				break;
-
-			case AML_INT_NAMEPATH_OP:	/* AML_NAMESTRING_ARG */
-
-				status =
-				    acpi_ps_get_next_namepath(walk_state,
-							      parser_state, op,
-							      1);
-				if (ACPI_FAILURE(status)) {
-					goto close_this_op;
-				}
-
-				walk_state->arg_types = 0;
-				break;
+		while (GET_CURRENT_ARG_TYPE(walk_state->arg_types)
+		       && !walk_state->arg_count) {
+			walk_state->aml_offset =
+			    (u32) ACPI_PTR_DIFF(walk_state->parser_state.aml,
+						walk_state->parser_state.
+						aml_start);
 
-			default:
-				/*
-				 * Op is not a constant or string, append each argument
-				 * to the Op
-				 */
-				while (GET_CURRENT_ARG_TYPE
-				       (walk_state->arg_types)
-				       && !walk_state->arg_count) {
-					walk_state->aml_offset = (u32)
-					    ACPI_PTR_DIFF(parser_state->aml,
-							  parser_state->
-							  aml_start);
+			status =
+			    acpi_ps_get_next_arg(walk_state,
+						 &(walk_state->parser_state),
+						 GET_CURRENT_ARG_TYPE
+						 (walk_state->arg_types), &arg);
+			if (ACPI_FAILURE(status)) {
+				return_ACPI_STATUS(status);
+			}
 
-					status =
-					    acpi_ps_get_next_arg(walk_state,
-								 parser_state,
-								 GET_CURRENT_ARG_TYPE
-								 (walk_state->
-								  arg_types),
-								 &arg);
-					if (ACPI_FAILURE(status)) {
-						goto close_this_op;
-					}
+			if (arg) {
+				arg->common.aml_offset = walk_state->aml_offset;
+				acpi_ps_append_arg(op, arg);
+			}
 
-					if (arg) {
-						arg->common.aml_offset =
-						    walk_state->aml_offset;
-						acpi_ps_append_arg(op, arg);
-					}
-					INCREMENT_ARG_LIST(walk_state->
-							   arg_types);
-				}
+			INCREMENT_ARG_LIST(walk_state->arg_types);
+		}
 
-				/* Special processing for certain opcodes */
+		/* Special processing for certain opcodes */
 
-				/* TBD (remove): Temporary mechanism to disable this code if needed */
+		/* TBD (remove): Temporary mechanism to disable this code if needed */
 
 #ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
 
-				if ((walk_state->pass_number <=
-				     ACPI_IMODE_LOAD_PASS1)
-				    &&
-				    ((walk_state->
-				      parse_flags & ACPI_PARSE_DISASSEMBLE) ==
-				     0)) {
-					/*
-					 * We want to skip If/Else/While constructs during Pass1
-					 * because we want to actually conditionally execute the
-					 * code during Pass2.
-					 *
-					 * Except for disassembly, where we always want to
-					 * walk the If/Else/While packages
-					 */
-					switch (op->common.aml_opcode) {
-					case AML_IF_OP:
-					case AML_ELSE_OP:
-					case AML_WHILE_OP:
-
-						ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
-								  "Pass1: Skipping an If/Else/While body\n"));
-
-						/* Skip body of if/else/while in pass 1 */
-
-						parser_state->aml =
-						    parser_state->pkg_end;
-						walk_state->arg_count = 0;
-						break;
-
-					default:
-						break;
-					}
-				}
-#endif
-				switch (op->common.aml_opcode) {
-				case AML_METHOD_OP:
-
-					/*
-					 * Skip parsing of control method
-					 * because we don't have enough info in the first pass
-					 * to parse it correctly.
-					 *
-					 * Save the length and address of the body
-					 */
-					op->named.data = parser_state->aml;
-					op->named.length =
-					    (u32) (parser_state->pkg_end -
-						   parser_state->aml);
-
-					/* Skip body of method */
-
-					parser_state->aml =
-					    parser_state->pkg_end;
-					walk_state->arg_count = 0;
-					break;
-
-				case AML_BUFFER_OP:
-				case AML_PACKAGE_OP:
-				case AML_VAR_PACKAGE_OP:
-
-					if ((op->common.parent) &&
-					    (op->common.parent->common.
-					     aml_opcode == AML_NAME_OP)
-					    && (walk_state->pass_number <=
-						ACPI_IMODE_LOAD_PASS2)) {
-						/*
-						 * Skip parsing of Buffers and Packages
-						 * because we don't have enough info in the first pass
-						 * to parse them correctly.
-						 */
-						op->named.data = aml_op_start;
-						op->named.length =
-						    (u32) (parser_state->
-							   pkg_end -
-							   aml_op_start);
-
-						/* Skip body */
-
-						parser_state->aml =
-						    parser_state->pkg_end;
-						walk_state->arg_count = 0;
-					}
-					break;
+		if ((walk_state->pass_number <= ACPI_IMODE_LOAD_PASS1) &&
+		    ((walk_state->parse_flags & ACPI_PARSE_DISASSEMBLE) == 0)) {
+			/*
+			 * We want to skip If/Else/While constructs during Pass1 because we
+			 * want to actually conditionally execute the code during Pass2.
+			 *
+			 * Except for disassembly, where we always want to walk the
+			 * If/Else/While packages
+			 */
+			switch (op->common.aml_opcode) {
+			case AML_IF_OP:
+			case AML_ELSE_OP:
+			case AML_WHILE_OP:
 
-				case AML_WHILE_OP:
+				ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+						  "Pass1: Skipping an If/Else/While body\n"));
 
-					if (walk_state->control_state) {
-						walk_state->control_state->
-						    control.package_end =
-						    parser_state->pkg_end;
-					}
-					break;
+				/* Skip body of if/else/while in pass 1 */
 
-				default:
+				walk_state->parser_state.aml =
+				    walk_state->parser_state.pkg_end;
+				walk_state->arg_count = 0;
+				break;
 
-					/* No action for all other opcodes */
-					break;
-				}
+			default:
 				break;
 			}
 		}
+#endif
 
-		/* Check for arguments that need to be processed */
-
-		if (walk_state->arg_count) {
+		switch (op->common.aml_opcode) {
+		case AML_METHOD_OP:
 			/*
-			 * There are arguments (complex ones), push Op and
-			 * prepare for argument
+			 * Skip parsing of control method because we don't have enough
+			 * info in the first pass to parse it correctly.
+			 *
+			 * Save the length and address of the body
 			 */
-			status = acpi_ps_push_scope(parser_state, op,
-						    walk_state->arg_types,
-						    walk_state->arg_count);
-			if (ACPI_FAILURE(status)) {
-				goto close_this_op;
-			}
-			op = NULL;
-			continue;
-		}
+			op->named.data = walk_state->parser_state.aml;
+			op->named.length = (u32)
+			    (walk_state->parser_state.pkg_end -
+			     walk_state->parser_state.aml);
 
-		/*
-		 * All arguments have been processed -- Op is complete,
-		 * prepare for next
-		 */
-		walk_state->op_info =
-		    acpi_ps_get_opcode_info(op->common.aml_opcode);
-		if (walk_state->op_info->flags & AML_NAMED) {
-			if (acpi_gbl_depth) {
-				acpi_gbl_depth--;
-			}
+			/* Skip body of method */
 
-			if (op->common.aml_opcode == AML_REGION_OP) {
+			walk_state->parser_state.aml =
+			    walk_state->parser_state.pkg_end;
+			walk_state->arg_count = 0;
+			break;
+
+		case AML_BUFFER_OP:
+		case AML_PACKAGE_OP:
+		case AML_VAR_PACKAGE_OP:
+
+			if ((op->common.parent) &&
+			    (op->common.parent->common.aml_opcode ==
+			     AML_NAME_OP)
+			    && (walk_state->pass_number <=
+				ACPI_IMODE_LOAD_PASS2)) {
 				/*
-				 * Skip parsing of control method or opregion body,
-				 * because we don't have enough info in the first pass
-				 * to parse them correctly.
-				 *
-				 * Completed parsing an op_region declaration, we now
-				 * know the length.
+				 * Skip parsing of Buffers and Packages because we don't have
+				 * enough info in the first pass to parse them correctly.
 				 */
-				op->named.length =
-				    (u32) (parser_state->aml - op->named.data);
-			}
-		}
+				op->named.data = aml_op_start;
+				op->named.length = (u32)
+				    (walk_state->parser_state.pkg_end -
+				     aml_op_start);
 
-		if (walk_state->op_info->flags & AML_CREATE) {
-			/*
-			 * Backup to beginning of create_xXXfield declaration (1 for
-			 * Opcode)
-			 *
-			 * body_length is unknown until we parse the body
-			 */
-			op->named.length =
-			    (u32) (parser_state->aml - op->named.data);
-		}
+				/* Skip body */
 
-		/* This op complete, notify the dispatcher */
+				walk_state->parser_state.aml =
+				    walk_state->parser_state.pkg_end;
+				walk_state->arg_count = 0;
+			}
+			break;
 
-		if (walk_state->ascending_callback != NULL) {
-			walk_state->op = op;
-			walk_state->opcode = op->common.aml_opcode;
+		case AML_WHILE_OP:
 
-			status = walk_state->ascending_callback(walk_state);
-			status =
-			    acpi_ps_next_parse_state(walk_state, op, status);
-			if (status == AE_CTRL_PENDING) {
-				status = AE_OK;
-				goto close_this_op;
+			if (walk_state->control_state) {
+				walk_state->control_state->control.package_end =
+				    walk_state->parser_state.pkg_end;
 			}
-		}
-
-	      close_this_op:
-		/*
-		 * Finished one argument of the containing scope
-		 */
-		parser_state->scope->parse_scope.arg_count--;
+			break;
 
-		/* Finished with pre_op */
+		default:
 
-		if (pre_op) {
-			acpi_ps_free_op(pre_op);
-			pre_op = NULL;
+			/* No action for all other opcodes */
+			break;
 		}
 
-		/* Close this Op (will result in parse subtree deletion) */
+		break;
+	}
 
-		status2 = acpi_ps_complete_this_op(walk_state, op);
-		if (ACPI_FAILURE(status2)) {
-			return_ACPI_STATUS(status2);
-		}
-		op = NULL;
+	return_ACPI_STATUS(AE_OK);
+}
 
-		switch (status) {
-		case AE_OK:
-			break;
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_complete_op
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *              Op                  - Returned Op
+ *              Status              - Parse status before complete Op
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Complete Op
+ *
+ ******************************************************************************/
 
-		case AE_CTRL_TRANSFER:
+static acpi_status
+acpi_ps_complete_op(struct acpi_walk_state *walk_state,
+		    union acpi_parse_object **op, acpi_status status)
+{
+	acpi_status status2;
 
-			/* We are about to transfer to a called method. */
+	ACPI_FUNCTION_TRACE_PTR(ps_complete_op, walk_state);
 
-			walk_state->prev_op = op;
-			walk_state->prev_arg_types = walk_state->arg_types;
-			return_ACPI_STATUS(status);
+	/*
+	 * Finished one argument of the containing scope
+	 */
+	walk_state->parser_state.scope->parse_scope.arg_count--;
 
-		case AE_CTRL_END:
+	/* Close this Op (will result in parse subtree deletion) */
 
-			acpi_ps_pop_scope(parser_state, &op,
-					  &walk_state->arg_types,
-					  &walk_state->arg_count);
+	status2 = acpi_ps_complete_this_op(walk_state, *op);
+	if (ACPI_FAILURE(status2)) {
+		return_ACPI_STATUS(status2);
+	}
 
-			if (op) {
-				walk_state->op = op;
-				walk_state->op_info =
-				    acpi_ps_get_opcode_info(op->common.
-							    aml_opcode);
-				walk_state->opcode = op->common.aml_opcode;
+	*op = NULL;
 
-				status =
-				    walk_state->ascending_callback(walk_state);
-				status =
-				    acpi_ps_next_parse_state(walk_state, op,
-							     status);
+	switch (status) {
+	case AE_OK:
+		break;
 
-				status2 =
-				    acpi_ps_complete_this_op(walk_state, op);
-				if (ACPI_FAILURE(status2)) {
-					return_ACPI_STATUS(status2);
-				}
-				op = NULL;
-			}
-			status = AE_OK;
-			break;
+	case AE_CTRL_TRANSFER:
 
-		case AE_CTRL_BREAK:
-		case AE_CTRL_CONTINUE:
+		/* We are about to transfer to a called method */
 
-			/* Pop off scopes until we find the While */
+		walk_state->prev_op = NULL;
+		walk_state->prev_arg_types = walk_state->arg_types;
+		return_ACPI_STATUS(status);
 
-			while (!op || (op->common.aml_opcode != AML_WHILE_OP)) {
-				acpi_ps_pop_scope(parser_state, &op,
-						  &walk_state->arg_types,
-						  &walk_state->arg_count);
+	case AE_CTRL_END:
 
-				if (op->common.aml_opcode != AML_WHILE_OP) {
-					status2 =
-					    acpi_ds_result_stack_pop
-					    (walk_state);
-					if (ACPI_FAILURE(status2)) {
-						return_ACPI_STATUS(status2);
-					}
-				}
-			}
-
-			/* Close this iteration of the While loop */
+		acpi_ps_pop_scope(&(walk_state->parser_state), op,
+				  &walk_state->arg_types,
+				  &walk_state->arg_count);
 
-			walk_state->op = op;
+		if (*op) {
+			walk_state->op = *op;
 			walk_state->op_info =
-			    acpi_ps_get_opcode_info(op->common.aml_opcode);
-			walk_state->opcode = op->common.aml_opcode;
+			    acpi_ps_get_opcode_info((*op)->common.aml_opcode);
+			walk_state->opcode = (*op)->common.aml_opcode;
 
 			status = walk_state->ascending_callback(walk_state);
 			status =
-			    acpi_ps_next_parse_state(walk_state, op, status);
+			    acpi_ps_next_parse_state(walk_state, *op, status);
 
-			status2 = acpi_ps_complete_this_op(walk_state, op);
+			status2 = acpi_ps_complete_this_op(walk_state, *op);
 			if (ACPI_FAILURE(status2)) {
 				return_ACPI_STATUS(status2);
 			}
-			op = NULL;
-
-			status = AE_OK;
-			break;
+		}
 
-		case AE_CTRL_TERMINATE:
+		status = AE_OK;
+		break;
 
-			status = AE_OK;
+	case AE_CTRL_BREAK:
+	case AE_CTRL_CONTINUE:
 
-			/* Clean up */
-			do {
-				if (op) {
-					status2 =
-					    acpi_ps_complete_this_op(walk_state,
-								     op);
-					if (ACPI_FAILURE(status2)) {
-						return_ACPI_STATUS(status2);
-					}
+		/* Pop off scopes until we find the While */
 
-					status2 =
-					    acpi_ds_result_stack_pop
-					    (walk_state);
-					if (ACPI_FAILURE(status2)) {
-						return_ACPI_STATUS(status2);
-					}
+		while (!(*op) || ((*op)->common.aml_opcode != AML_WHILE_OP)) {
+			acpi_ps_pop_scope(&(walk_state->parser_state), op,
+					  &walk_state->arg_types,
+					  &walk_state->arg_count);
 
-					acpi_ut_delete_generic_state
-					    (acpi_ut_pop_generic_state
-					     (&walk_state->control_state));
+			if ((*op)->common.aml_opcode != AML_WHILE_OP) {
+				status2 = acpi_ds_result_stack_pop(walk_state);
+				if (ACPI_FAILURE(status2)) {
+					return_ACPI_STATUS(status2);
 				}
+			}
+		}
 
-				acpi_ps_pop_scope(parser_state, &op,
-						  &walk_state->arg_types,
-						  &walk_state->arg_count);
+		/* Close this iteration of the While loop */
 
-			} while (op);
+		walk_state->op = *op;
+		walk_state->op_info =
+		    acpi_ps_get_opcode_info((*op)->common.aml_opcode);
+		walk_state->opcode = (*op)->common.aml_opcode;
 
-			return_ACPI_STATUS(status);
+		status = walk_state->ascending_callback(walk_state);
+		status = acpi_ps_next_parse_state(walk_state, *op, status);
 
-		default:	/* All other non-AE_OK status */
+		status2 = acpi_ps_complete_this_op(walk_state, *op);
+		if (ACPI_FAILURE(status2)) {
+			return_ACPI_STATUS(status2);
+		}
 
-			do {
-				if (op) {
-					status2 =
-					    acpi_ps_complete_this_op(walk_state,
-								     op);
-					if (ACPI_FAILURE(status2)) {
-						return_ACPI_STATUS(status2);
-					}
+		status = AE_OK;
+		break;
+
+	case AE_CTRL_TERMINATE:
+
+		/* Clean up */
+		do {
+			if (*op) {
+				status2 =
+				    acpi_ps_complete_this_op(walk_state, *op);
+				if (ACPI_FAILURE(status2)) {
+					return_ACPI_STATUS(status2);
+				}
+				status2 = acpi_ds_result_stack_pop(walk_state);
+				if (ACPI_FAILURE(status2)) {
+					return_ACPI_STATUS(status2);
 				}
 
-				acpi_ps_pop_scope(parser_state, &op,
-						  &walk_state->arg_types,
-						  &walk_state->arg_count);
+				acpi_ut_delete_generic_state
+				    (acpi_ut_pop_generic_state
+				     (&walk_state->control_state));
+			}
 
-			} while (op);
+			acpi_ps_pop_scope(&(walk_state->parser_state), op,
+					  &walk_state->arg_types,
+					  &walk_state->arg_count);
 
-			/*
-			 * TBD: Cleanup parse ops on error
-			 */
-#if 0
-			if (op == NULL) {
-				acpi_ps_pop_scope(parser_state, &op,
-						  &walk_state->arg_types,
-						  &walk_state->arg_count);
+		} while (*op);
+
+		return_ACPI_STATUS(AE_OK);
+
+	default:		/* All other non-AE_OK status */
+
+		do {
+			if (*op) {
+				status2 =
+				    acpi_ps_complete_this_op(walk_state, *op);
+				if (ACPI_FAILURE(status2)) {
+					return_ACPI_STATUS(status2);
+				}
 			}
-#endif
-			walk_state->prev_op = op;
-			walk_state->prev_arg_types = walk_state->arg_types;
-			return_ACPI_STATUS(status);
-		}
 
-		/* This scope complete? */
+			acpi_ps_pop_scope(&(walk_state->parser_state), op,
+					  &walk_state->arg_types,
+					  &walk_state->arg_count);
 
-		if (acpi_ps_has_completed_scope(parser_state)) {
-			acpi_ps_pop_scope(parser_state, &op,
+		} while (*op);
+
+#if 0
+		/*
+		 * TBD: Cleanup parse ops on error
+		 */
+		if (*op == NULL) {
+			acpi_ps_pop_scope(parser_state, op,
 					  &walk_state->arg_types,
 					  &walk_state->arg_count);
-			ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
-					  "Popped scope, Op=%p\n", op));
-		} else {
-			op = NULL;
 		}
+#endif
+		walk_state->prev_op = NULL;
+		walk_state->prev_arg_types = walk_state->arg_types;
+		return_ACPI_STATUS(status);
+	}
 
-	}			/* while parser_state->Aml */
+	/* This scope complete? */
+
+	if (acpi_ps_has_completed_scope(&(walk_state->parser_state))) {
+		acpi_ps_pop_scope(&(walk_state->parser_state), op,
+				  &walk_state->arg_types,
+				  &walk_state->arg_count);
+		ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Popped scope, Op=%p\n", *op));
+	} else {
+		*op = NULL;
+	}
+
+	return_ACPI_STATUS(AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_complete_final_op
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *              Op                  - Current Op
+ *              Status              - Current parse status before complete last
+ *                                    Op
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Complete last Op.
+ *
+ ******************************************************************************/
+
+static acpi_status
+acpi_ps_complete_final_op(struct acpi_walk_state *walk_state,
+			  union acpi_parse_object *op, acpi_status status)
+{
+	acpi_status status2;
+
+	ACPI_FUNCTION_TRACE_PTR(ps_complete_final_op, walk_state);
 
 	/*
 	 * Complete the last Op (if not completed), and clear the scope stack.
 	 * It is easily possible to end an AML "package" with an unbounded number
 	 * of open scopes (such as when several ASL blocks are closed with
-	 * sequential closing braces).  We want to terminate each one cleanly.
+	 * sequential closing braces). We want to terminate each one cleanly.
 	 */
 	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "AML package complete at Op %p\n",
 			  op));
@@ -838,8 +750,12 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
 				    acpi_ps_next_parse_state(walk_state, op,
 							     status);
 				if (status == AE_CTRL_PENDING) {
-					status = AE_OK;
-					goto close_this_op;
+					status =
+					    acpi_ps_complete_op(walk_state, &op,
+								AE_OK);
+					if (ACPI_FAILURE(status)) {
+						return_ACPI_STATUS(status);
+					}
 				}
 
 				if (status == AE_CTRL_TERMINATE) {
@@ -858,7 +774,9 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
 							}
 						}
 
-						acpi_ps_pop_scope(parser_state,
+						acpi_ps_pop_scope(&
+								  (walk_state->
+								   parser_state),
 								  &op,
 								  &walk_state->
 								  arg_types,
@@ -887,10 +805,252 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
 			}
 		}
 
-		acpi_ps_pop_scope(parser_state, &op, &walk_state->arg_types,
+		acpi_ps_pop_scope(&(walk_state->parser_state), &op,
+				  &walk_state->arg_types,
 				  &walk_state->arg_count);
 
 	} while (op);
 
 	return_ACPI_STATUS(status);
 }
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_parse_loop
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Parse AML (pointed to by the current parser state) and return
+ *              a tree of ops.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
+{
+	acpi_status status = AE_OK;
+	union acpi_parse_object *op = NULL;	/* current op */
+	struct acpi_parse_state *parser_state;
+	u8 *aml_op_start = NULL;
+
+	ACPI_FUNCTION_TRACE_PTR(ps_parse_loop, walk_state);
+
+	if (walk_state->descending_callback == NULL) {
+		return_ACPI_STATUS(AE_BAD_PARAMETER);
+	}
+
+	parser_state = &walk_state->parser_state;
+	walk_state->arg_types = 0;
+
+#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
+
+	if (walk_state->walk_type & ACPI_WALK_METHOD_RESTART) {
+
+		/* We are restarting a preempted control method */
+
+		if (acpi_ps_has_completed_scope(parser_state)) {
+			/*
+			 * We must check if a predicate to an IF or WHILE statement
+			 * was just completed
+			 */
+			if ((parser_state->scope->parse_scope.op) &&
+			    ((parser_state->scope->parse_scope.op->common.
+			      aml_opcode == AML_IF_OP)
+			     || (parser_state->scope->parse_scope.op->common.
+				 aml_opcode == AML_WHILE_OP))
+			    && (walk_state->control_state)
+			    && (walk_state->control_state->common.state ==
+				ACPI_CONTROL_PREDICATE_EXECUTING)) {
+				/*
+				 * A predicate was just completed, get the value of the
+				 * predicate and branch based on that value
+				 */
+				walk_state->op = NULL;
+				status =
+				    acpi_ds_get_predicate_value(walk_state,
+								ACPI_TO_POINTER
+								(TRUE));
+				if (ACPI_FAILURE(status)
+				    && ((status & AE_CODE_MASK) !=
+					AE_CODE_CONTROL)) {
+					if (status == AE_AML_NO_RETURN_VALUE) {
+						ACPI_EXCEPTION((AE_INFO, status,
+								"Invoked method did not return a value"));
+
+					}
+
+					ACPI_EXCEPTION((AE_INFO, status,
+							"GetPredicate Failed"));
+					return_ACPI_STATUS(status);
+				}
+
+				status =
+				    acpi_ps_next_parse_state(walk_state, op,
+							     status);
+			}
+
+			acpi_ps_pop_scope(parser_state, &op,
+					  &walk_state->arg_types,
+					  &walk_state->arg_count);
+			ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+					  "Popped scope, Op=%p\n", op));
+		} else if (walk_state->prev_op) {
+
+			/* We were in the middle of an op */
+
+			op = walk_state->prev_op;
+			walk_state->arg_types = walk_state->prev_arg_types;
+		}
+	}
+#endif
+
+	/* Iterative parsing loop, while there is more AML to process: */
+
+	while ((parser_state->aml < parser_state->aml_end) || (op)) {
+		aml_op_start = parser_state->aml;
+		if (!op) {
+			status =
+			    acpi_ps_create_op(walk_state, aml_op_start, &op);
+			if (ACPI_FAILURE(status)) {
+				if (status == AE_CTRL_PARSE_CONTINUE) {
+					continue;
+				}
+
+				if (status == AE_CTRL_PARSE_PENDING) {
+					status = AE_OK;
+				}
+
+				status =
+				    acpi_ps_complete_op(walk_state, &op,
+							status);
+				if (ACPI_FAILURE(status)) {
+					return_ACPI_STATUS(status);
+				}
+
+				continue;
+			}
+
+			op->common.aml_offset = walk_state->aml_offset;
+
+			if (walk_state->op_info) {
+				ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+						  "Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X\n",
+						  (u32) op->common.aml_opcode,
+						  walk_state->op_info->name, op,
+						  parser_state->aml,
+						  op->common.aml_offset));
+			}
+		}
+
+		/*
+		 * Start arg_count at zero because we don't know if there are
+		 * any args yet
+		 */
+		walk_state->arg_count = 0;
+
+		/* Are there any arguments that must be processed? */
+
+		if (walk_state->arg_types) {
+
+			/* Get arguments */
+
+			status =
+			    acpi_ps_get_arguments(walk_state, aml_op_start, op);
+			if (ACPI_FAILURE(status)) {
+				status =
+				    acpi_ps_complete_op(walk_state, &op,
+							status);
+				if (ACPI_FAILURE(status)) {
+					return_ACPI_STATUS(status);
+				}
+
+				continue;
+			}
+		}
+
+		/* Check for arguments that need to be processed */
+
+		if (walk_state->arg_count) {
+			/*
+			 * There are arguments (complex ones), push Op and
+			 * prepare for argument
+			 */
+			status = acpi_ps_push_scope(parser_state, op,
+						    walk_state->arg_types,
+						    walk_state->arg_count);
+			if (ACPI_FAILURE(status)) {
+				status =
+				    acpi_ps_complete_op(walk_state, &op,
+							status);
+				if (ACPI_FAILURE(status)) {
+					return_ACPI_STATUS(status);
+				}
+
+				continue;
+			}
+
+			op = NULL;
+			continue;
+		}
+
+		/*
+		 * All arguments have been processed -- Op is complete,
+		 * prepare for next
+		 */
+		walk_state->op_info =
+		    acpi_ps_get_opcode_info(op->common.aml_opcode);
+		if (walk_state->op_info->flags & AML_NAMED) {
+			if (acpi_gbl_depth) {
+				acpi_gbl_depth--;
+			}
+
+			if (op->common.aml_opcode == AML_REGION_OP) {
+				/*
+				 * Skip parsing of control method or opregion body,
+				 * because we don't have enough info in the first pass
+				 * to parse them correctly.
+				 *
+				 * Completed parsing an op_region declaration, we now
+				 * know the length.
+				 */
+				op->named.length =
+				    (u32) (parser_state->aml - op->named.data);
+			}
+		}
+
+		if (walk_state->op_info->flags & AML_CREATE) {
+			/*
+			 * Backup to beginning of create_xXXfield declaration (1 for
+			 * Opcode)
+			 *
+			 * body_length is unknown until we parse the body
+			 */
+			op->named.length =
+			    (u32) (parser_state->aml - op->named.data);
+		}
+
+		/* This op complete, notify the dispatcher */
+
+		if (walk_state->ascending_callback != NULL) {
+			walk_state->op = op;
+			walk_state->opcode = op->common.aml_opcode;
+
+			status = walk_state->ascending_callback(walk_state);
+			status =
+			    acpi_ps_next_parse_state(walk_state, op, status);
+			if (status == AE_CTRL_PENDING) {
+				status = AE_OK;
+			}
+		}
+
+		status = acpi_ps_complete_op(walk_state, &op, status);
+		if (ACPI_FAILURE(status)) {
+			return_ACPI_STATUS(status);
+		}
+
+	}			/* while parser_state->Aml */
+
+	status = acpi_ps_complete_final_op(walk_state, op, status);
+	return_ACPI_STATUS(status);
+}
diff --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h
index 797ca1e..8fa00e8 100644
--- a/include/acpi/acexcep.h
+++ b/include/acpi/acexcep.h
@@ -178,8 +178,10 @@
 #define AE_CTRL_BREAK                   (acpi_status) (0x0009 | AE_CODE_CONTROL)
 #define AE_CTRL_CONTINUE                (acpi_status) (0x000A | AE_CODE_CONTROL)
 #define AE_CTRL_SKIP                    (acpi_status) (0x000B | AE_CODE_CONTROL)
+#define AE_CTRL_PARSE_CONTINUE          (acpi_status) (0x000C | AE_CODE_CONTROL)
+#define AE_CTRL_PARSE_PENDING           (acpi_status) (0x000D | AE_CODE_CONTROL)
 
-#define AE_CODE_CTRL_MAX                0x000B
+#define AE_CODE_CTRL_MAX                0x000D
 
 #ifdef DEFINE_ACPI_GLOBALS
 
@@ -291,7 +293,9 @@ char const *acpi_gbl_exception_names_ctrl[] = {
 	"AE_CTRL_TRANSFER",
 	"AE_CTRL_BREAK",
 	"AE_CTRL_CONTINUE",
-	"AE_CTRL_SKIP"
+	"AE_CTRL_SKIP",
+	"AE_CTRL_PARSE_CONTINUE",
+	"AE_CTRL_PARSE_PENDING"
 };
 
 #endif				/* ACPI GLOBALS */
-- 
1.5.0.rc3.39.gec804

  parent reply	other threads:[~2007-02-07 18:55 UTC|newest]

Thread overview: 143+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-07 18:50 ACPI patches for 2.6.21 Len Brown
2007-02-07 18:50 ` Len Brown
2007-02-07 18:50   ` Len Brown
2007-02-07 18:50     ` [PATCH 1/140] ACPI: clean up scan.c Len Brown
2007-02-07 18:50       ` Len Brown
2007-02-07 18:50       ` [PATCH 2/140] ACPI: rename some functions Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 3/140] ACPI: add device_driver and hepler functions Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 4/140] ACPI: add ACPI bus_type for driver model Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 5/140] ACPI: change registration interface to follow " Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 6/140] ACPI: adjust init order Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 7/140] ACPI: convert to sysfs framework Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 8/140] ACPI: add acpi_bus_ops in acpi_device Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 9/140] ACPI: add acpi_bus_removal_type " Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 10/140] ACPI: consolidate two motherboard drivers into one Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 11/140] ACPI: Convert ACPI PCI .bind/.unbind to use PCI bridge driver Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 12/140] ACPI: Set fake hid for non-PNPID ACPI devices Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 13/140] output: Add display output class support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 14/140] output: Add output class document Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 15/140] ACPI: Adds backlight sysfs support for acpi video driver Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 16/140] ACPI: use PNPID:instance_no as bus_id of ACPI device Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 17/140] ACPI: fix Supermicro X7DB8+ Boot regression Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 18/140] ACPI: video: fix LCD monitor seen as CRT Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 19/140] ACPI: use more understandable bus_id for ACPI devices Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 20/140] ACPI: Optimize acpi_get_pci_rootbridge_handle() to boot faster Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 21/140] ACPI: move FADT resource reservations from motherboard driver to osl Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 22/140] PNP: reserve system board iomem resources as well as ioport resources Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 23/140] PNP: system.c whitespace cleanup Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 24/140] i386: turn on CONFIG_PNP in defconfig Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 25/140] ACPI: remove motherboard driver (redundant with PNP system driver) Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 26/140] PNPACPI: remove EXPERIMENTAL dependency Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 27/140] ACPI: add a Kconfig option for ACPI procfs interface Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 28/140] ACPI: add ACPI debug attribute in sysfs Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 29/140] ACPI: add ACPICA version " Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 30/140] asus-laptop: add base driver Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 31/140] asus-laptop: add led support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 32/140] asus-laptop: add bluetooth and wlan support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 33/140] asus-laptop: add backlight support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 34/140] asus-laptop: add display switching support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 35/140] asus-laptop: add ledd support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 36/140] asus-laptop: add light sensor support Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 37/140] asus-laptop: Lindent Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 39/140] ACPI: delete unused acpi_device_get_debug_info() Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 40/140] ACPI: correct id for fixed buttons Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 41/140] ACPI: prevent build failure when CONFIG_X86_NUMAQ=y Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 42/140] ACPICA: Update function header Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 43/140] ACPICA: Handle mis-matched package length Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 44/140] ACPICA: Handle case NumElements > Package length Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:50       ` [PATCH 45/140] ACPICA: Delete recursive feature of ACPI Global Lock Len Brown
2007-02-07 18:50         ` Len Brown
2007-02-07 18:51       ` [PATCH 46/140] ACPICA: Release global lock from interrupt handler Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 47/140] ACPICA: Cast acpi_thread_id to UINT32 for debug output only Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 48/140] ACPICA: fix for object premature deletion Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 49/140] ACPICA: Temporary fix for BankValue parameter Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 50/140] ACPICA: Update version to 20060721 Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 51/140] ACPICA: Update debug output Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 53/140] ACPICA: misc fixes for new Table Manager: Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 54/140] ACPICA: Update comments for individual table fields Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 55/140] ACPICA: Fix for FADT conversion in 64-bit mode Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 56/140] ACPICA: Lint changes Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 57/140] ACPICA: minimal patch to integrate new tables into Linux Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 58/140] ACPICA: Add support for DMAR table Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 59/140] ACPICA: Add acpi_gpe_count global to track the number of GPE events Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 60/140] ACPICA: Disable all wake GPEs after first one recieved Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 61/140] ACPICA: Fix unalignment in acpi_ut_repair_name Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 62/140] ACPICA: Store GPE number instead of bitmask Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 63/140] ACPICA: Split acpi_format_exception into two parts Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 64/140] ACPICA: Update version to 20060831 Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 65/140] ACPICA: Cleanup of FADT verification function Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 66/140] ACPICA: Create tbfadt.c to hold all FADT-related functions Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 67/140] ACPICA: Re-implement interpreters' "serialized mode" Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 68/140] ACPICA: Delete stale FADT functions outside tbfadt.c Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 69/140] ACPICA: Update comments in tbfadt.c Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 70/140] ACPICA: add ASF comment Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 71/140] ACPICA: re-factor table init routines for benefit of iASL Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 72/140] ACPICA: Allow type ANY to be the target of the Scope operator Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 73/140] ACPICA: IsResourceTemplate now returns ACPI_STATUS Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 74/140] ACPICA: Add declarations for ASF! sub-tables Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 75/140] ACPICA: FADT verification is now table driven Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 76/140] ACPICA: Report error if method creates 2 objects with the same name Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 77/140] ACPICA: New common routine for creating and verifying a local FADT Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 78/140] ACPICA: Fix memory leak in table load error path Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 79/140] ACPICA: Fix trace output name and whitespace Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 80/140] ACPICA: Update version to 20060912 Len Brown
2007-02-07 18:51         ` Len Brown
     [not found]           ` <11708744951308-git-send-emailMessage-Id: <d41eb99bac4063aa3fac2dbb8ca01bedd9f0b3bf.1170873818.git.len.brown@intel.com>
2007-02-07 18:51       ` [PATCH 81/140] ACPICA: Add full table name to disassembler output Len Brown
2007-02-07 18:51         ` Len Brown
2007-02-07 18:51       ` [PATCH 82/140] ACPICA: Fix for Global Lock semaphore Len Brown
2007-02-07 18:51       ` [PATCH 83/140] ACPICA: Remove obsolete Flags parameter Len Brown
2007-02-07 18:51       ` [PATCH 84/140] ACPICA: Use faster ByIndex interface to get FACS Len Brown
2007-02-07 18:51       ` [PATCH 85/140] ACPICA: On AML mutex force-release, set depth to zero (was 1) Len Brown
2007-02-07 18:51       ` [PATCH 86/140] ACPICA: Update interpreter error paths to always report the error Len Brown
2007-02-07 18:51       ` [PATCH 87/140] ACPICA: Fix for possible memory leak and fault Len Brown
2007-02-07 18:51       ` [PATCH 88/140] ACPICA: Add new subsystem state bit that is set after SubsystemInitialize is called Len Brown
2007-02-07 18:51       ` [PATCH 89/140] ACPICA: Update version to 20060927 Len Brown
2007-02-07 18:51       ` Len Brown [this message]
2007-02-07 18:51       ` [PATCH 91/140] ACPICA: Eliminate control method 2-pass parse/execute Len Brown
2007-02-07 18:51       ` [PATCH 92/140] ACPICA: Fix race condition with AcpiWalkNamespace Len Brown
2007-02-07 18:51       ` [PATCH 93/140] ACPICA: _CID support for PCI Root Bridge detection Len Brown
2007-02-07 18:51       ` [PATCH 94/140] ACPICA: Use manifest constants for parse pass number Len Brown
2007-02-07 18:51       ` [PATCH 95/140] ACPICA: Update comments Len Brown
2007-02-07 18:51       ` [PATCH 96/140] ACPICA: Abort downward walk on temporary node detection Len Brown
2007-02-07 18:51       ` [PATCH 97/140] ACPICA: Fixes for parameter validation Len Brown
2007-02-07 18:51       ` [PATCH 98/140] ACPICA: Update version to 20061011 Len Brown
2007-02-07 18:51       ` [PATCH 99/140] ACPICA: Remove duplicate table manager Len Brown
2007-02-07 18:51       ` [PATCH 100/140] ACPICA: use new ACPI headers Len Brown
2007-02-07 18:51       ` [PATCH 101/140] ACPICA: Remove duplicate table definitions Len Brown
2007-02-07 18:51       ` [PATCH 102/140] ACPICA: Remove duplicate table definitions (non-conflicting) Len Brown
2007-02-07 18:51       ` [PATCH 103/140] ACPICA: Remove duplicate table definitions (non-conflicting), cont Len Brown
2007-02-07 18:51       ` [PATCH 104/140] ACPICA: Update debug output routines for data structure changes Len Brown
2007-02-07 18:51       ` [PATCH 105/140] ACPICA: Miscellaneous table manager updates and optimizations Len Brown
2007-02-07 18:52       ` [PATCH 106/140] ACPICA: Fixes for load() operator Len Brown
2007-02-07 18:52       ` [PATCH 107/140] ACPICA: Remove global lock handler on AcpiTerminate Len Brown
2007-02-07 18:52       ` [PATCH 108/140] ACPICA: Ensure that all structures in acobject.h are aligned, via #pragma Len Brown
2007-02-07 18:52       ` [PATCH 109/140] ACPICA: Add ACPI_MAX macro Len Brown
2007-02-07 18:52       ` [PATCH 110/140] ACPICA: Fail AcpiEnable if ACPI tables not loaded Len Brown
2007-02-07 18:52       ` [PATCH 111/140] ACPICA: Add include of actables.h Len Brown
2007-02-07 18:52       ` [PATCH 112/140] ACPICA: Update version to 20061109 Len Brown
2007-02-07 18:52       ` [PATCH 113/140] ACPICA: Removed all 16-bit support Len Brown
2007-02-07 18:52       ` [PATCH 114/140] ACPICA: Debugger multithreading enhancements Len Brown
2007-02-07 18:52       ` [PATCH 115/140] ACPICA: Update a comment Len Brown
2007-02-07 18:52       ` [PATCH 117/140] ACPICA: Added option to display memory statistics upon termination Len Brown
2007-02-07 18:52       ` [PATCH 118/140] ACPICA: Update version to 20061215 Len Brown
2007-02-07 18:52       ` [PATCH 119/140] ACPICA: Allow ACPI id to be u32 instead of u8 Len Brown
2007-02-07 18:52       ` [PATCH 120/140] ACPICA: Allow processor to be declared with the Device() instead of Processor() Len Brown
2007-02-07 18:52       ` [PATCH 121/140] ACPICA: Update copyright to 2007 Len Brown
2007-02-07 18:52       ` [PATCH 122/140] ACPICA: Fix for incorrect parameter passed to AcpiTbDeleteTable during table load Len Brown
2007-02-07 18:52       ` [PATCH 123/140] ACPICA: Update version to 20070126 Len Brown
2007-02-07 18:52       ` [PATCH 124/140] ACPI: build fix for IBM x440 - CONFIG_X86_SUMMIT Len Brown
2007-02-07 18:52       ` [PATCH 125/140] ACPI: fix HP RX2600 IA64 boot Len Brown
2007-02-07 18:52       ` [PATCH 126/140] ACPI_NUMA: fix HP IA64 simulator issue with extended memory domain Len Brown
2007-02-07 18:52       ` [PATCH 127/140] ACPICA: reduce conflicts with Altix patch series Len Brown
2007-02-07 18:52       ` [PATCH 128/140] Altix: ACPI SSDT PCI device support Len Brown
2007-02-07 18:52       ` [PATCH 129/140] Altix: Add ACPI SSDT PCI device support (hotplug) Len Brown
2007-02-07 18:52       ` [PATCH 130/140] ACPICA: fix gcc build warnings Len Brown
2007-02-07 18:52       ` [PATCH 131/140] ACPI: dock: check if parent is on dock Len Brown
2007-02-07 18:52       ` [PATCH 132/140] ACPI: bay: new driver adding removable drive bay support Len Brown
2007-02-07 18:52       ` [PATCH 133/140] ACPI: bay: delete unused variable Len Brown
2007-02-07 18:52       ` [PATCH 134/140] ACPI: bay: remove prototype procfs code Len Brown
2007-02-07 18:52       ` [PATCH 135/140] ACPI: bay: make bay a platform driver Len Brown
2007-04-13 17:25         ` Bjorn Helgaas
2007-02-07 18:52       ` [PATCH 136/140] ACPI: bay: make drive_bays static Len Brown
2007-02-07 18:52       ` [PATCH 137/140] ACPI: bay: new driver is EXPERIMENTAL Len Brown
2007-02-07 18:52       ` [PATCH 138/140] ACPI: bay: Convert ACPI Bay driver to be compatible with sysfs update Len Brown
2007-02-07 18:52       ` [PATCH 139/140] asus-laptop: merge with ACPICA table update Len Brown
2007-02-07 18:52       ` [PATCH 140/140] ACPICA: reduce table header messages to fit within 80 columns Len Brown
2007-02-07 19:42   ` ACPI patches for 2.6.21 Mattia Dongili
2007-02-07 20:19     ` Len Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1170874504414-git-send-email-lenb@kernel.org \
    --to=lenb@kernel.org \
    --cc=alexey.y.starikovskiy@intel.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=mikhail.v.kouzmich@intel.com \
    --cc=robert.moore@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.