summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/exmonad.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/exmonad.c')
-rw-r--r--sys/contrib/dev/acpica/exmonad.c82
1 files changed, 65 insertions, 17 deletions
diff --git a/sys/contrib/dev/acpica/exmonad.c b/sys/contrib/dev/acpica/exmonad.c
index d82b767..90dd7e8 100644
--- a/sys/contrib/dev/acpica/exmonad.c
+++ b/sys/contrib/dev/acpica/exmonad.c
@@ -1,8 +1,8 @@
/******************************************************************************
*
- * Module Name: exmonad - ACPI AML (p-code) execution for monadic operators
- * $Revision: 99 $
+ * Module Name: exmonad - ACPI AML execution for monadic (1 operand) operators
+ * $Revision: 104 $
*
*****************************************************************************/
@@ -227,31 +227,42 @@ AcpiExMonadic1 (
UINT16 Opcode,
ACPI_WALK_STATE *WalkState)
{
- ACPI_OPERAND_OBJECT *ObjDesc;
+ ACPI_OPERAND_OBJECT *ObjDesc = NULL;
ACPI_STATUS Status;
+ ACPI_STATUS ResolveStatus;
FUNCTION_TRACE_PTR ("ExMonadic1", WALK_OPERANDS);
- /* Resolve all operands */
+ /* Resolve the operand */
- Status = AcpiExResolveOperands (Opcode, WALK_OPERANDS, WalkState);
+ ResolveStatus = AcpiExResolveOperands (Opcode, WALK_OPERANDS, WalkState);
DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE,
AcpiPsGetOpcodeName (Opcode),
1, "after AcpiExResolveOperands");
- /* Get all operands */
+ /* Get the operand */
- Status |= AcpiDsObjStackPopObject (&ObjDesc, WalkState);
- if (ACPI_FAILURE (Status))
+ Status = AcpiDsObjStackPopObject (&ObjDesc, WalkState);
+
+ /* Check operand status */
+
+ if (ACPI_FAILURE (ResolveStatus))
{
- DEBUG_PRINTP (ACPI_ERROR, ("bad operand(s) %s\n",
- AcpiPsGetOpcodeName (Opcode), AcpiUtFormatException(Status)));
+ DEBUG_PRINTP (ACPI_ERROR, ("[%s]: Could not resolve operands, %s\n",
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException (ResolveStatus)));
goto Cleanup;
}
+ if (ACPI_FAILURE (Status))
+ {
+ DEBUG_PRINTP (ACPI_ERROR, ("[%s]: bad operand(s) %s\n",
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException (Status)));
+
+ goto Cleanup;
+ }
/* Examine the opcode */
@@ -345,6 +356,7 @@ AcpiExMonadic2R (
ACPI_OPERAND_OBJECT *RetDesc2 = NULL;
UINT32 ResVal;
ACPI_STATUS Status;
+ ACPI_STATUS ResolveStatus;
UINT32 i;
UINT32 j;
ACPI_INTEGER Digit;
@@ -355,19 +367,30 @@ AcpiExMonadic2R (
/* Resolve all operands */
- Status = AcpiExResolveOperands (Opcode, WALK_OPERANDS, WalkState);
+ ResolveStatus = AcpiExResolveOperands (Opcode, WALK_OPERANDS, WalkState);
DUMP_OPERANDS (WALK_OPERANDS, IMODE_EXECUTE,
AcpiPsGetOpcodeName (Opcode),
2, "after AcpiExResolveOperands");
/* Get all operands */
- Status |= AcpiDsObjStackPopObject (&ResDesc, WalkState);
+ Status = AcpiDsObjStackPopObject (&ResDesc, WalkState);
Status |= AcpiDsObjStackPopObject (&ObjDesc, WalkState);
+
+ /* Now we can check the status codes */
+
+ if (ACPI_FAILURE (ResolveStatus))
+ {
+ DEBUG_PRINTP (ACPI_ERROR, ("[%s]: Could not resolve operands, %s\n",
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException (ResolveStatus)));
+
+ goto Cleanup;
+ }
+
if (ACPI_FAILURE (Status))
{
- DEBUG_PRINTP (ACPI_ERROR, ("bad operand(s) %s\n",
- AcpiPsGetOpcodeName (Opcode), AcpiUtFormatException(Status)));
+ DEBUG_PRINTP (ACPI_ERROR, ("[%s]: bad operand(s) %s\n",
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException(Status)));
goto Cleanup;
}
@@ -610,6 +633,31 @@ AcpiExMonadic2R (
/*
+ * ACPI 2.0 Opcodes
+ */
+ case AML_TO_DECSTRING_OP:
+
+ DEBUG_PRINTP (ACPI_ERROR, ("%s is not implemented\n",
+ AcpiPsGetOpcodeName (Opcode)));
+ Status = AE_NOT_IMPLEMENTED;
+ goto Cleanup;
+ break;
+
+
+ case AML_TO_HEXSTRING_OP:
+ Status = AcpiExConvertToString (ObjDesc, &RetDesc, ACPI_UINT32_MAX, WalkState);
+ break;
+
+ case AML_TO_BUFFER_OP:
+ Status = AcpiExConvertToBuffer (ObjDesc, &RetDesc, WalkState);
+ break;
+
+ case AML_TO_INTEGER_OP:
+ Status = AcpiExConvertToInteger (ObjDesc, &RetDesc, WalkState);
+ break;
+
+
+ /*
* These are obsolete opcodes
*/
@@ -710,7 +758,7 @@ AcpiExMonadic2 (
if (ACPI_FAILURE (ResolveStatus))
{
DEBUG_PRINTP (ACPI_ERROR, ("[%s]: Could not resolve operands, %s\n",
- AcpiPsGetOpcodeName (Opcode), AcpiUtFormatException (ResolveStatus)));
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException (ResolveStatus)));
goto Cleanup;
}
@@ -718,7 +766,7 @@ AcpiExMonadic2 (
if (ACPI_FAILURE (Status))
{
DEBUG_PRINTP (ACPI_ERROR, ("[%s]: Bad operand(s), %s\n",
- AcpiPsGetOpcodeName (Opcode), AcpiUtFormatException (Status)));
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException (Status)));
goto Cleanup;
}
@@ -793,7 +841,7 @@ AcpiExMonadic2 (
if (ACPI_FAILURE (Status))
{
DEBUG_PRINTP (ACPI_ERROR, ("%s: bad operand(s) %s\n",
- AcpiPsGetOpcodeName (Opcode), AcpiUtFormatException(Status)));
+ AcpiPsGetOpcodeName (Opcode), AcpiFormatException(Status)));
goto Cleanup;
}
OpenPOWER on IntegriCloud