diff options
author | jkim <jkim@FreeBSD.org> | 2012-08-16 17:26:22 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2012-08-16 17:26:22 +0000 |
commit | 08e6f22ac3350a67c38e9b42b5dce2a7d5fa08b4 (patch) | |
tree | a28a9676fa0b9e969cfd83d7a508660c754c8b3e /source/components/disassembler/dmbuffer.c | |
parent | dbd90a99cde8c4a942a41f095faa72f479694173 (diff) | |
download | FreeBSD-src-08e6f22ac3350a67c38e9b42b5dce2a7d5fa08b4.zip FreeBSD-src-08e6f22ac3350a67c38e9b42b5dce2a7d5fa08b4.tar.gz |
Import ACPICA 20120816.
Diffstat (limited to 'source/components/disassembler/dmbuffer.c')
-rw-r--r-- | source/components/disassembler/dmbuffer.c | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/source/components/disassembler/dmbuffer.c b/source/components/disassembler/dmbuffer.c index 9f49f92..d0a66ef 100644 --- a/source/components/disassembler/dmbuffer.c +++ b/source/components/disassembler/dmbuffer.c @@ -64,6 +64,12 @@ static void AcpiDmIsEisaIdElement ( ACPI_PARSE_OBJECT *Op); +static void +AcpiDmPldBuffer ( + UINT32 Level, + UINT8 *ByteData, + UINT32 ByteCount); + /******************************************************************************* * @@ -180,6 +186,12 @@ AcpiDmByteList ( AcpiDmUnicode (Op); break; + case ACPI_DASM_PLD_METHOD: + + AcpiDmDisasmByteList (Info->Level, ByteData, ByteCount); + AcpiDmPldBuffer (Info->Level, ByteData, ByteCount); + break; + case ACPI_DASM_BUFFER: default: @@ -332,6 +344,161 @@ AcpiDmIsStringBuffer ( /******************************************************************************* * + * FUNCTION: AcpiDmIsPldBuffer + * + * PARAMETERS: Op - Buffer Object to be examined + * + * RETURN: TRUE if buffer contains a ASCII string, FALSE otherwise + * + * DESCRIPTION: Determine if a buffer Op contains a _PLD structure + * + ******************************************************************************/ + +BOOLEAN +AcpiDmIsPldBuffer ( + ACPI_PARSE_OBJECT *Op) +{ + ACPI_NAMESPACE_NODE *Node; + ACPI_PARSE_OBJECT *ParentOp; + + + ParentOp = Op->Common.Parent; + if (!ParentOp) + { + return (FALSE); + } + + /* Check for form: Name(_PLD, Buffer() {}). Not legal, however */ + + if (ParentOp->Common.AmlOpcode == AML_NAME_OP) + { + Node = ParentOp->Common.Node; + + if (ACPI_COMPARE_NAME (Node->Name.Ascii, METHOD_NAME__PLD)) + { + return (TRUE); + } + + return (FALSE); + } + + /* Check for proper form: Name(_PLD, Package() {Buffer() {}}) */ + + if (ParentOp->Common.AmlOpcode == AML_PACKAGE_OP) + { + ParentOp = ParentOp->Common.Parent; + if (!ParentOp) + { + return (FALSE); + } + + if (ParentOp->Common.AmlOpcode == AML_NAME_OP) + { + Node = ParentOp->Common.Node; + + if (ACPI_COMPARE_NAME (Node->Name.Ascii, METHOD_NAME__PLD)) + { + return (TRUE); + } + } + } + + return (FALSE); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmPldBuffer + * + * PARAMETERS: Level - Current source code indentation level + * ByteData - Pointer to the byte list + * ByteCount - Length of the byte list + * + * RETURN: None + * + * DESCRIPTION: Dump and format the contents of a _PLD buffer object + * + ******************************************************************************/ + +#define ACPI_PLD_OUTPUT "%*.s/* %18s : %-6.2X */\n", ACPI_MUL_4 (Level), " " +#define ACPI_PLD_OUTPUT16 "%*.s/* %18s : %-6.4X */\n", ACPI_MUL_4 (Level), " " +#define ACPI_PLD_OUTPUT24 "%*.s/* %18s : %-6.6X */\n", ACPI_MUL_4 (Level), " " + +static void +AcpiDmPldBuffer ( + UINT32 Level, + UINT8 *ByteData, + UINT32 ByteCount) +{ + ACPI_PLD_INFO *PldInfo; + ACPI_STATUS Status; + + + /* Check for valid byte count */ + + if (ByteCount < ACPI_PLD_REV1_BUFFER_SIZE) + { + return; + } + + /* Convert _PLD buffer to local _PLD struct */ + + Status = AcpiDecodePldBuffer (ByteData, ByteCount, &PldInfo); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* First 32-bit dword */ + + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Revision", PldInfo->Revision); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "IgnoreColor", PldInfo->IgnoreColor); + AcpiOsPrintf (ACPI_PLD_OUTPUT24,"Color", PldInfo->Color); + + /* Second 32-bit dword */ + + AcpiOsPrintf (ACPI_PLD_OUTPUT16,"Width", PldInfo->Width); + AcpiOsPrintf (ACPI_PLD_OUTPUT16,"Height", PldInfo->Height); + + /* Third 32-bit dword */ + + AcpiOsPrintf (ACPI_PLD_OUTPUT, "UserVisible", PldInfo->UserVisible); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Dock", PldInfo->Dock); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Lid", PldInfo->Lid); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Panel", PldInfo->Panel); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "VerticalPosition", PldInfo->VerticalPosition); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "HorizontalPosition", PldInfo->HorizontalPosition); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Shape", PldInfo->Shape); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "GroupOrientation", PldInfo->GroupOrientation); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "GroupToken", PldInfo->GroupToken); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "GroupPosition", PldInfo->GroupPosition); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Bay", PldInfo->Bay); + + /* Fourth 32-bit dword */ + + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Ejectable", PldInfo->Ejectable); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "OspmEjectRequired", PldInfo->OspmEjectRequired); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "CabinetNumber", PldInfo->CabinetNumber); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "CardCageNumber", PldInfo->CardCageNumber); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Reference", PldInfo->Reference); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Rotation", PldInfo->Rotation); + AcpiOsPrintf (ACPI_PLD_OUTPUT, "Order", PldInfo->Order); + + /* Fifth 32-bit dword */ + + if (ByteCount >= ACPI_PLD_REV1_BUFFER_SIZE) + { + AcpiOsPrintf (ACPI_PLD_OUTPUT16,"VerticalOffset", PldInfo->VerticalOffset); + AcpiOsPrintf (ACPI_PLD_OUTPUT16,"HorizontalOffset", PldInfo->HorizontalOffset); + } + + ACPI_FREE (PldInfo); +} + + +/******************************************************************************* + * * FUNCTION: AcpiDmUnicode * * PARAMETERS: Op - Byte List op containing Unicode string |