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
- Lines: 133
- Date:
Wed Jul 5 11:23:13 2000
- Orig file:
v2.4.0-test2/linux/drivers/acpi/parser/psxface.c
- Orig date:
Wed Dec 31 16:00:00 1969
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)