patch-2.4.0-test3 linux/drivers/acpi/parser/psxface.c

Next file: linux/drivers/acpi/resources/rsaddr.c
Previous file: linux/drivers/acpi/parser/pswalk.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test2/linux/drivers/acpi/parser/psxface.c linux/drivers/acpi/parser/psxface.c
@@ -0,0 +1,132 @@
+
+/******************************************************************************
+ *
+ * Module Name: psxface - Parser external interfaces
+ *
+ *****************************************************************************/
+
+/*
+ *  Copyright (C) 2000 R. Byron Moore
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "acpi.h"
+#include "parser.h"
+#include "dispatch.h"
+#include "interp.h"
+#include "amlcode.h"
+#include "namesp.h"
+
+
+#define _COMPONENT          PARSER
+	 MODULE_NAME         ("psxface");
+
+
+char    *acpi_gbl_parser_id = "Non-recursive AML Parser";
+
+
+/*****************************************************************************
+ *
+ * FUNCTION:    Acpi_psx_execute
+ *
+ * PARAMETERS:  Obj_desc            - A method object containing both the AML
+ *                                    address and length.
+ *              **Params            - List of parameters to pass to method,
+ *                                    terminated by NULL. Params itself may be
+ *                                    NULL if no parameters are being passed.
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Execute a control method
+ *
+ ****************************************************************************/
+
+ACPI_STATUS
+acpi_psx_execute (
+	ACPI_NAMED_OBJECT       *method_entry,
+	ACPI_OBJECT_INTERNAL    **params,
+	ACPI_OBJECT_INTERNAL    **return_obj_desc)
+{
+	ACPI_STATUS             status;
+	ACPI_OBJECT_INTERNAL    *obj_desc;
+	u32                     i;
+
+
+	/* Validate the NTE and get the attached object */
+
+	if (!method_entry) {
+		return (AE_NULL_ENTRY);
+	}
+
+	obj_desc = acpi_ns_get_attached_object (method_entry);
+	if (!obj_desc) {
+		return (AE_NULL_OBJECT);
+	}
+
+	/* Parse method if necessary, wait on concurrency semaphore */
+
+	status = acpi_ds_begin_method_execution (method_entry, obj_desc);
+	if (ACPI_FAILURE (status)) {
+		return (status);
+	}
+
+	if (params) {
+		/*
+		 * The caller "owns" the parameters, so give each one an extra
+		 * reference
+		 */
+
+		for (i = 0; params[i]; i++) {
+			acpi_cm_add_reference (params[i]);
+		}
+	}
+
+	/*
+	 * Method is parsed and ready to execute
+	 * The walk of the parse tree is where we actually execute the method
+	 */
+
+	status = acpi_ps_walk_parsed_aml (obj_desc->method.parser_op,
+			  obj_desc->method.parser_op, obj_desc,
+			  method_entry->child_table, params, return_obj_desc,
+			  obj_desc->method.owning_id, acpi_ds_exec_begin_op,
+			  acpi_ds_exec_end_op);
+
+	if (params) {
+		/* Take away the extra reference that we gave the parameters above */
+
+		for (i = 0; params[i]; i++) {
+			acpi_cm_update_object_reference (params[i], REF_DECREMENT);
+		}
+	}
+
+
+	/*
+	 * Normal exit is with Status == AE_RETURN_VALUE when a Return_op has been
+	 * executed, or with Status == AE_PENDING at end of AML block (end of
+	 * Method code)
+	 */
+
+	if (*return_obj_desc) {
+		status = AE_CTRL_RETURN_VALUE;
+	}
+
+
+	return (status);
+}
+
+

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)