DynamicTablesPkg: Apply uncrustify changes

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737

Apply uncrustify changes to .c/.h files in the DynamicTablesPkg package

Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
Michael Kubacki
2021-12-05 14:53:55 -08:00
committed by mergify[bot]
parent 7c34237831
commit 731c67e1d7
85 changed files with 5347 additions and 4795 deletions

View File

@@ -46,31 +46,32 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseFieldElement (
IN CONST AML_BYTE_ENCODING * FieldByteEncoding,
IN OUT AML_OBJECT_NODE * FieldNode,
IN OUT AML_STREAM * FStream,
IN OUT LIST_ENTRY * NameSpaceRefList
IN CONST AML_BYTE_ENCODING *FieldByteEncoding,
IN OUT AML_OBJECT_NODE *FieldNode,
IN OUT AML_STREAM *FStream,
IN OUT LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
UINT8 * CurrPos;
AML_OBJECT_NODE * NewNode;
UINT8 *CurrPos;
AML_OBJECT_NODE *NewNode;
UINT32 PkgLenOffset;
UINT32 PkgLenSize;
UINT32 PkgLenOffset;
UINT32 PkgLenSize;
// Check whether the node is an Object Node and has a field list.
// The byte encoding must be a field element.
if ((FieldByteEncoding == NULL) ||
((FieldByteEncoding->Attribute & AML_IS_FIELD_ELEMENT) == 0) ||
((FieldByteEncoding->Attribute & AML_IS_PSEUDO_OPCODE) ==
AML_IS_PSEUDO_OPCODE) ||
AML_IS_PSEUDO_OPCODE) ||
!AmlNodeHasAttribute (FieldNode, AML_HAS_FIELD_LIST) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -98,7 +99,8 @@ AmlParseFieldElement (
// Parse the PkgLen if available.
PkgLenSize = 0;
if ((FieldByteEncoding->Attribute & AML_HAS_PKG_LENGTH) ==
AML_HAS_PKG_LENGTH) {
AML_HAS_PKG_LENGTH)
{
PkgLenOffset = AmlGetPkgLength (CurrPos, &PkgLenSize);
if (PkgLenOffset == 0) {
ASSERT (0);
@@ -129,14 +131,14 @@ AmlParseFieldElement (
// Add the FieldElement to the Variable Argument List.
Status = AmlVarListAddTailInternal (
(AML_NODE_HEADER*)FieldNode,
(AML_NODE_HEADER*)NewNode
(AML_NODE_HEADER *)FieldNode,
(AML_NODE_HEADER *)NewNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
// Delete the sub-tree if the insertion failed.
// Otherwise its reference will be lost.
AmlDeleteTree ((AML_NODE_HEADER*)NewNode);
AmlDeleteTree ((AML_NODE_HEADER *)NewNode);
return Status;
}
@@ -144,10 +146,10 @@ AmlParseFieldElement (
if (!IS_END_OF_STREAM (FStream)) {
// Parse the fixed arguments of the field element.
Status = AmlParseFixedArguments (
NewNode,
FStream,
NameSpaceRefList
);
NewNode,
FStream,
NameSpaceRefList
);
if (EFI_ERROR (Status)) {
ASSERT (0);
}
@@ -182,14 +184,14 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseNamedFieldElement (
IN CONST AML_BYTE_ENCODING * NamedFieldByteEncoding,
IN OUT AML_OBJECT_NODE * FieldNode,
IN OUT AML_STREAM * FStream,
IN OUT LIST_ENTRY * NameSpaceRefList
)
IN CONST AML_BYTE_ENCODING *NamedFieldByteEncoding,
IN OUT AML_OBJECT_NODE *FieldNode,
IN OUT AML_STREAM *FStream,
IN OUT LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
AML_OBJECT_NODE * NewNode;
EFI_STATUS Status;
AML_OBJECT_NODE *NewNode;
// Check whether the node is an Object Node and has a field list.
// The byte encoding must be a char.
@@ -199,7 +201,8 @@ AmlParseNamedFieldElement (
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -217,14 +220,14 @@ AmlParseNamedFieldElement (
// Add the NamedField node to the variable argument list.
Status = AmlVarListAddTailInternal (
(AML_NODE_HEADER*)FieldNode,
(AML_NODE_HEADER*)NewNode
(AML_NODE_HEADER *)FieldNode,
(AML_NODE_HEADER *)NewNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
// Delete the sub-tree if the insertion failed.
// Otherwise its reference will be lost.
AmlDeleteTree ((AML_NODE_HEADER*)NewNode);
AmlDeleteTree ((AML_NODE_HEADER *)NewNode);
return Status;
}
@@ -306,23 +309,24 @@ AmlParseNamedFieldElement (
EFI_STATUS
EFIAPI
AmlParseFieldList (
IN AML_OBJECT_NODE * FieldNode,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_OBJECT_NODE *FieldNode,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
UINT8 * CurrPos;
CONST AML_BYTE_ENCODING * FieldByteEncoding;
CONST AML_BYTE_ENCODING * NamedFieldByteEncoding;
UINT8 *CurrPos;
CONST AML_BYTE_ENCODING *FieldByteEncoding;
CONST AML_BYTE_ENCODING *NamedFieldByteEncoding;
// Check whether the node is an Object Node and has a field list.
if (!AmlNodeHasAttribute (FieldNode, AML_HAS_FIELD_LIST) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -351,7 +355,8 @@ AmlParseFieldList (
// call AmlGetByteEncoding() to check that the encoding is NameChar.
NamedFieldByteEncoding = AmlGetByteEncoding (CurrPos);
if ((NamedFieldByteEncoding != NULL) &&
(NamedFieldByteEncoding->Attribute & AML_IS_NAME_CHAR)) {
(NamedFieldByteEncoding->Attribute & AML_IS_NAME_CHAR))
{
// This is a NamedField field element since it is starting with a char.
Status = AmlParseNamedFieldElement (
NamedFieldByteEncoding,

View File

@@ -69,9 +69,9 @@
EFI_STATUS
EFIAPI
AmlParseFieldList (
IN AML_OBJECT_NODE * FieldNode,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_OBJECT_NODE *FieldNode,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
);
#endif // AML_FIELD_LIST_PARSER_H_

View File

@@ -30,7 +30,7 @@ STATIC
EFI_STATUS
EFIAPI
AmlDeleteNameSpaceRefNode (
IN AML_NAMESPACE_REF_NODE * NameSpaceRefNode
IN AML_NAMESPACE_REF_NODE *NameSpaceRefNode
)
{
if (NameSpaceRefNode == NULL) {
@@ -39,7 +39,7 @@ AmlDeleteNameSpaceRefNode (
}
if (NameSpaceRefNode->RawAbsolutePath != NULL) {
FreePool ((CHAR8*)NameSpaceRefNode->RawAbsolutePath);
FreePool ((CHAR8 *)NameSpaceRefNode->RawAbsolutePath);
} else {
ASSERT (0);
return EFI_INVALID_PARAMETER;
@@ -59,11 +59,11 @@ AmlDeleteNameSpaceRefNode (
EFI_STATUS
EFIAPI
AmlDeleteNameSpaceRefList (
IN LIST_ENTRY * NameSpaceRefList
IN LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
LIST_ENTRY * CurrentLink;
EFI_STATUS Status;
LIST_ENTRY *CurrentLink;
if (NameSpaceRefList == NULL) {
ASSERT (0);
@@ -74,7 +74,7 @@ AmlDeleteNameSpaceRefList (
CurrentLink = NameSpaceRefList->ForwardLink;
RemoveEntryList (CurrentLink);
Status = AmlDeleteNameSpaceRefNode (
(AML_NAMESPACE_REF_NODE*)CurrentLink
(AML_NAMESPACE_REF_NODE *)CurrentLink
);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -106,18 +106,19 @@ STATIC
EFI_STATUS
EFIAPI
AmlCreateMethodRefNode (
IN CONST AML_OBJECT_NODE * ObjectNode,
IN CONST CHAR8 * RawAbsolutePath,
IN UINT32 RawAbsolutePathSize,
OUT AML_NAMESPACE_REF_NODE ** NameSpaceRefNodePtr
IN CONST AML_OBJECT_NODE *ObjectNode,
IN CONST CHAR8 *RawAbsolutePath,
IN UINT32 RawAbsolutePathSize,
OUT AML_NAMESPACE_REF_NODE **NameSpaceRefNodePtr
)
{
AML_NAMESPACE_REF_NODE * NameSpaceRefNode;
AML_NAMESPACE_REF_NODE *NameSpaceRefNode;
if (!AmlNodeHasAttribute (ObjectNode, AML_IN_NAMESPACE) ||
(RawAbsolutePath == NULL) ||
(RawAbsolutePathSize == 0) ||
(NameSpaceRefNodePtr == NULL)) {
(NameSpaceRefNodePtr == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -129,10 +130,10 @@ AmlCreateMethodRefNode (
}
NameSpaceRefNode->RawAbsolutePathSize = RawAbsolutePathSize;
NameSpaceRefNode->RawAbsolutePath = AllocateCopyPool (
RawAbsolutePathSize,
RawAbsolutePath
);
NameSpaceRefNode->RawAbsolutePath = AllocateCopyPool (
RawAbsolutePathSize,
RawAbsolutePath
);
if (NameSpaceRefNode->RawAbsolutePath == NULL) {
FreePool (NameSpaceRefNode);
ASSERT (0);
@@ -142,7 +143,7 @@ AmlCreateMethodRefNode (
InitializeListHead (&NameSpaceRefNode->Link);
NameSpaceRefNode->NodeRef = ObjectNode;
*NameSpaceRefNodePtr = NameSpaceRefNode;
*NameSpaceRefNodePtr = NameSpaceRefNode;
return EFI_SUCCESS;
}
@@ -156,11 +157,11 @@ AmlCreateMethodRefNode (
VOID
EFIAPI
AmlDbgPrintNameSpaceRefList (
IN CONST LIST_ENTRY * NameSpaceRefList
IN CONST LIST_ENTRY *NameSpaceRefList
)
{
LIST_ENTRY * CurrLink;
AML_NAMESPACE_REF_NODE * CurrNameSpaceNode;
LIST_ENTRY *CurrLink;
AML_NAMESPACE_REF_NODE *CurrNameSpaceNode;
if (NameSpaceRefList == NULL) {
ASSERT (0);
@@ -171,7 +172,7 @@ AmlDbgPrintNameSpaceRefList (
CurrLink = NameSpaceRefList->ForwardLink;
while (CurrLink != NameSpaceRefList) {
CurrNameSpaceNode = (AML_NAMESPACE_REF_NODE*)CurrLink;
CurrNameSpaceNode = (AML_NAMESPACE_REF_NODE *)CurrLink;
AMLDBG_PRINT_CHARS (
DEBUG_INFO,
@@ -215,28 +216,29 @@ STATIC
EFI_STATUS
EFIAPI
AmlInitRawPathBStream (
IN CONST AML_STREAM * FStream,
OUT AML_STREAM * RawPathNameBStream
IN CONST AML_STREAM *FStream,
OUT AML_STREAM *RawPathNameBStream
)
{
EFI_STATUS Status;
EFI_STATUS Status;
UINT8 * RawPathBuffer;
CONST CHAR8 * Buffer;
UINT8 *RawPathBuffer;
CONST CHAR8 *Buffer;
UINT32 Root;
UINT32 ParentPrefix;
UINT32 SegCount;
UINT32 Root;
UINT32 ParentPrefix;
UINT32 SegCount;
if (!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(RawPathNameBStream == NULL)) {
!IS_STREAM_FORWARD (FStream) ||
(RawPathNameBStream == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Buffer = (CONST CHAR8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST CHAR8 *)AmlStreamGetCurrPos (FStream);
if (Buffer == NULL) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
@@ -255,11 +257,11 @@ AmlInitRawPathBStream (
}
// Get the beginning of the raw NameString.
RawPathBuffer = (UINT8*)AmlGetFirstNameSeg (
Buffer,
Root,
ParentPrefix
);
RawPathBuffer = (UINT8 *)AmlGetFirstNameSeg (
Buffer,
Root,
ParentPrefix
);
if (RawPathBuffer == NULL) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
@@ -313,16 +315,17 @@ STATIC
EFI_STATUS
EFIAPI
AmlGetFirstNamedAncestorNode (
IN CONST AML_NODE_HEADER * Node,
OUT AML_NODE_HEADER ** OutNamedNode
IN CONST AML_NODE_HEADER *Node,
OUT AML_NODE_HEADER **OutNamedNode
)
{
EFI_STATUS Status;
CONST AML_NODE_HEADER * NameSpaceNode;
EFI_STATUS Status;
CONST AML_NODE_HEADER *NameSpaceNode;
if ((!IS_AML_OBJECT_NODE (Node) &&
!IS_AML_ROOT_NODE (Node)) ||
(OutNamedNode == NULL)) {
(OutNamedNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -331,23 +334,26 @@ AmlGetFirstNamedAncestorNode (
// get the ancestor NameSpace node.
while (!IS_AML_ROOT_NODE (Node) &&
!(AmlNodeHasAttribute (
(CONST AML_OBJECT_NODE*)Node,
AML_IN_NAMESPACE) &&
AmlNodeGetName ((CONST AML_OBJECT_NODE*)Node) != NULL)) {
(CONST AML_OBJECT_NODE *)Node,
AML_IN_NAMESPACE
) &&
AmlNodeGetName ((CONST AML_OBJECT_NODE *)Node) != NULL))
{
Status = AmlGetFirstAncestorNameSpaceNode (
Node,
(AML_NODE_HEADER**)&NameSpaceNode
);
Node,
(AML_NODE_HEADER **)&NameSpaceNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
return Status;
}
// The NameSpaceNode may not have its name defined as yet. In this
// case get the next ancestor node.
Node = NameSpaceNode;
}
*OutNamedNode = (AML_NODE_HEADER*)Node;
*OutNamedNode = (AML_NODE_HEADER *)Node;
return EFI_SUCCESS;
}
@@ -380,20 +386,20 @@ STATIC
EFI_STATUS
EFIAPI
AmlBuildRawMethodAbsolutePath (
IN CONST AML_NODE_HEADER * ParentNode,
IN CONST AML_STREAM * PathnameFStream,
IN OUT AML_STREAM * AbsolutePathBStream
IN CONST AML_NODE_HEADER *ParentNode,
IN CONST AML_STREAM *PathnameFStream,
IN OUT AML_STREAM *AbsolutePathBStream
)
{
EFI_STATUS Status;
EFI_STATUS Status;
AML_NODE_HEADER * NamedParentNode;
UINT8 * RawPathBuffer;
CONST CHAR8 * CurrPos;
AML_NODE_HEADER *NamedParentNode;
UINT8 *RawPathBuffer;
CONST CHAR8 *CurrPos;
UINT32 Root;
UINT32 ParentPrefix;
UINT32 SegCount;
UINT32 Root;
UINT32 ParentPrefix;
UINT32 SegCount;
if ((!IS_AML_OBJECT_NODE (ParentNode) &&
!IS_AML_ROOT_NODE (ParentNode)) ||
@@ -402,12 +408,13 @@ AmlBuildRawMethodAbsolutePath (
!IS_STREAM_FORWARD (PathnameFStream) ||
!IS_STREAM (AbsolutePathBStream) ||
IS_END_OF_STREAM (AbsolutePathBStream) ||
!IS_STREAM_BACKWARD (AbsolutePathBStream)) {
!IS_STREAM_BACKWARD (AbsolutePathBStream))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
CurrPos = (CONST CHAR8*)AmlStreamGetCurrPos (PathnameFStream);
CurrPos = (CONST CHAR8 *)AmlStreamGetCurrPos (PathnameFStream);
if (CurrPos == NULL) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
@@ -428,11 +435,11 @@ AmlBuildRawMethodAbsolutePath (
// Copy the method invocation raw relative path at the end of the Stream.
if (SegCount != 0) {
// Get the beginning of the raw NameString.
RawPathBuffer = (UINT8*)AmlGetFirstNameSeg (
CurrPos,
Root,
ParentPrefix
);
RawPathBuffer = (UINT8 *)AmlGetFirstNameSeg (
CurrPos,
Root,
ParentPrefix
);
Status = AmlStreamWrite (
AbsolutePathBStream,
@@ -487,19 +494,19 @@ STATIC
EFI_STATUS
EFIAPI
AmlCompareRawNameString (
IN CONST AML_STREAM * RawFStream1,
IN CONST AML_STREAM * RawFStream2,
OUT UINT32 * CompareCount
IN CONST AML_STREAM *RawFStream1,
IN CONST AML_STREAM *RawFStream2,
OUT UINT32 *CompareCount
)
{
EFI_STATUS Status;
UINT32 Index;
EFI_STATUS Status;
UINT32 Index;
AML_STREAM RawFStream1Clone;
AML_STREAM RawFStream2Clone;
UINT32 Stream1Size;
UINT32 Stream2Size;
UINT32 CompareLen;
AML_STREAM RawFStream1Clone;
AML_STREAM RawFStream2Clone;
UINT32 Stream1Size;
UINT32 Stream2Size;
UINT32 CompareLen;
// Raw NameStrings have a size that is a multiple of the size of NameSegs.
if (!IS_STREAM (RawFStream1) ||
@@ -507,7 +514,8 @@ AmlCompareRawNameString (
!IS_STREAM_FORWARD (RawFStream1) ||
!IS_STREAM (RawFStream2) ||
IS_END_OF_STREAM (RawFStream2) ||
(CompareCount == NULL)) {
(CompareCount == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -537,14 +545,16 @@ AmlCompareRawNameString (
}
CompareLen = MIN (Stream1Size, Stream2Size);
Index = 0;
Index = 0;
// Check there is enough space for a NameSeg in both Stream1 and Stream2.
while (Index < CompareLen) {
if (!AmlStreamCmp (
&RawFStream1Clone,
&RawFStream2Clone,
AML_NAME_SEG_SIZE)
) {
AML_NAME_SEG_SIZE
)
)
{
// NameSegs are different. Break.
break;
}
@@ -554,6 +564,7 @@ AmlCompareRawNameString (
ASSERT (0);
return Status;
}
Status = AmlStreamProgress (&RawFStream2Clone, AML_NAME_SEG_SIZE);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -599,28 +610,29 @@ STATIC
EFI_STATUS
EFIAPI
AmlResolveAliasMethod (
IN CONST AML_OBJECT_NODE * AliasNode,
IN CONST LIST_ENTRY * NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE ** OutNameSpaceRefNode
IN CONST AML_OBJECT_NODE *AliasNode,
IN CONST LIST_ENTRY *NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE **OutNameSpaceRefNode
)
{
EFI_STATUS Status;
AML_STREAM SourceAliasFStream;
CONST AML_DATA_NODE * DataNode;
EFI_STATUS Status;
AML_STREAM SourceAliasFStream;
CONST AML_DATA_NODE *DataNode;
if (!AmlNodeCompareOpCode (AliasNode, AML_ALIAS_OP, 0) ||
(NameSpaceRefList == NULL) ||
(OutNameSpaceRefNode == NULL)) {
(OutNameSpaceRefNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
// The aliased NameString (the source name) is the first fixed argument,
// cf. ACPI6.3 spec, s19.6.4: Alias (SourceObject, AliasObject)
DataNode = (CONST AML_DATA_NODE*)AmlGetFixedArgument (
(AML_OBJECT_NODE*)AliasNode,
EAmlParseIndexTerm0
);
DataNode = (CONST AML_DATA_NODE *)AmlGetFixedArgument (
(AML_OBJECT_NODE *)AliasNode,
EAmlParseIndexTerm0
);
if (DataNode == NULL) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
@@ -641,7 +653,7 @@ AmlResolveAliasMethod (
// Recursively check whether the source alias NameString
// is a method invocation.
Status = AmlIsMethodInvocation (
AmlGetParent ((AML_NODE_HEADER*)AliasNode),
AmlGetParent ((AML_NODE_HEADER *)AliasNode),
&SourceAliasFStream,
NameSpaceRefList,
OutNameSpaceRefNode
@@ -710,27 +722,27 @@ STATIC
EFI_STATUS
EFIAPI
AmlFindMethodDefinition (
IN CONST AML_STREAM * RawAbsolutePathFStream,
IN CONST AML_STREAM * RawPathNameBStream,
IN CONST LIST_ENTRY * NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE ** OutNameSpaceRefNode
IN CONST AML_STREAM *RawAbsolutePathFStream,
IN CONST AML_STREAM *RawPathNameBStream,
IN CONST LIST_ENTRY *NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE **OutNameSpaceRefNode
)
{
EFI_STATUS Status;
EFI_STATUS Status;
LIST_ENTRY * NextLink;
LIST_ENTRY *NextLink;
// To resolve a pathname, scope levels need to be compared.
UINT32 NameSegScopeCount;
UINT32 PathNameSegScopeCount;
UINT32 ProbedScopeCount;
UINT32 BestScopeCount;
UINT32 NameSegScopeCount;
UINT32 PathNameSegScopeCount;
UINT32 ProbedScopeCount;
UINT32 BestScopeCount;
AML_STREAM ProbedRawAbsoluteFStream;
AML_STREAM ProbedRawAbsoluteBStream;
AML_STREAM ProbedRawAbsoluteFStream;
AML_STREAM ProbedRawAbsoluteBStream;
AML_NAMESPACE_REF_NODE * ProbedNameSpaceRefNode;
AML_NAMESPACE_REF_NODE * BestNameSpaceRefNode;
AML_NAMESPACE_REF_NODE *ProbedNameSpaceRefNode;
AML_NAMESPACE_REF_NODE *BestNameSpaceRefNode;
if (!IS_STREAM (RawAbsolutePathFStream) ||
IS_END_OF_STREAM (RawAbsolutePathFStream) ||
@@ -743,7 +755,8 @@ AmlFindMethodDefinition (
((AmlStreamGetIndex (RawPathNameBStream) &
(AML_NAME_SEG_SIZE - 1)) != 0) ||
(NameSpaceRefList == NULL) ||
(OutNameSpaceRefNode == NULL)) {
(OutNameSpaceRefNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -751,21 +764,21 @@ AmlFindMethodDefinition (
DEBUG ((DEBUG_VERBOSE, "AmlMethodParser: Checking absolute name: "));
AMLDBG_PRINT_CHARS (
DEBUG_VERBOSE,
(CONST CHAR8*)AmlStreamGetCurrPos (RawAbsolutePathFStream),
(CONST CHAR8 *)AmlStreamGetCurrPos (RawAbsolutePathFStream),
AmlStreamGetMaxBufferSize (RawAbsolutePathFStream)
);
DEBUG ((DEBUG_VERBOSE, ".\n"));
BestNameSpaceRefNode = NULL;
BestScopeCount = 0;
NameSegScopeCount = AmlStreamGetMaxBufferSize (RawAbsolutePathFStream);
BestNameSpaceRefNode = NULL;
BestScopeCount = 0;
NameSegScopeCount = AmlStreamGetMaxBufferSize (RawAbsolutePathFStream);
PathNameSegScopeCount = AmlStreamGetMaxBufferSize (RawPathNameBStream);
// Iterate through the raw AML absolute path to find the best match.
DEBUG ((DEBUG_VERBOSE, "AmlMethodParser: Comparing with: "));
NextLink = NameSpaceRefList->ForwardLink;
while (NextLink != NameSpaceRefList) {
ProbedNameSpaceRefNode = (AML_NAMESPACE_REF_NODE*)NextLink;
ProbedNameSpaceRefNode = (AML_NAMESPACE_REF_NODE *)NextLink;
// Print the raw absolute path of the probed node.
AMLDBG_PRINT_CHARS (
@@ -790,7 +803,7 @@ AmlFindMethodDefinition (
// "MET0" should be skipped.
Status = AmlStreamInit (
&ProbedRawAbsoluteBStream,
(UINT8*)ProbedNameSpaceRefNode->RawAbsolutePath,
(UINT8 *)ProbedNameSpaceRefNode->RawAbsolutePath,
ProbedNameSpaceRefNode->RawAbsolutePathSize,
EAmlStreamDirectionBackward
);
@@ -803,7 +816,9 @@ AmlFindMethodDefinition (
if (!AmlStreamCmp (
RawPathNameBStream,
&ProbedRawAbsoluteBStream,
AmlStreamGetMaxBufferSize (RawPathNameBStream))) {
AmlStreamGetMaxBufferSize (RawPathNameBStream)
))
{
NextLink = NextLink->ForwardLink;
continue;
}
@@ -820,7 +835,7 @@ AmlFindMethodDefinition (
// Thus, the best match is \AAAA.MET0.
Status = AmlStreamInit (
&ProbedRawAbsoluteFStream,
(UINT8*)ProbedNameSpaceRefNode->RawAbsolutePath,
(UINT8 *)ProbedNameSpaceRefNode->RawAbsolutePath,
ProbedNameSpaceRefNode->RawAbsolutePathSize,
EAmlStreamDirectionForward
);
@@ -847,7 +862,7 @@ AmlFindMethodDefinition (
} else if (ProbedScopeCount > BestScopeCount) {
// The probed node has more scope levels in common than the
// last best match. Update the best match.
BestScopeCount = ProbedScopeCount;
BestScopeCount = ProbedScopeCount;
BestNameSpaceRefNode = ProbedNameSpaceRefNode;
} else if (ProbedScopeCount == BestScopeCount) {
// The probed node has the same number of scope levels in
@@ -871,11 +886,13 @@ AmlFindMethodDefinition (
// didn't because it is out of scope.
// Thus, the best match is \AAAA.MET0.
if (AmlStreamGetIndex (&ProbedRawAbsoluteFStream) <
BestNameSpaceRefNode->RawAbsolutePathSize) {
BestScopeCount = ProbedScopeCount;
BestNameSpaceRefNode->RawAbsolutePathSize)
{
BestScopeCount = ProbedScopeCount;
BestNameSpaceRefNode = ProbedNameSpaceRefNode;
} else if (AmlStreamGetIndex (&ProbedRawAbsoluteFStream) ==
BestNameSpaceRefNode->RawAbsolutePathSize) {
BestNameSpaceRefNode->RawAbsolutePathSize)
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -893,7 +910,10 @@ AmlFindMethodDefinition (
*OutNameSpaceRefNode = BestNameSpaceRefNode;
} else if (AmlNodeCompareOpCode (
BestNameSpaceRefNode->NodeRef,
AML_ALIAS_OP, 0)) {
AML_ALIAS_OP,
0
))
{
// The path matches an alias. Resolve the alias and check whether
// this is a method defintion.
Status = AmlResolveAliasMethod (
@@ -943,22 +963,22 @@ AmlFindMethodDefinition (
EFI_STATUS
EFIAPI
AmlIsMethodInvocation (
IN CONST AML_NODE_HEADER * ParentNode,
IN CONST AML_STREAM * FStream,
IN CONST LIST_ENTRY * NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE ** OutNameSpaceRefNode
IN CONST AML_NODE_HEADER *ParentNode,
IN CONST AML_STREAM *FStream,
IN CONST LIST_ENTRY *NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE **OutNameSpaceRefNode
)
{
EFI_STATUS Status;
EFI_STATUS Status;
AML_STREAM RawPathNameBStream;
AML_STREAM RawAbsolutePathFStream;
AML_STREAM RawPathNameBStream;
AML_STREAM RawAbsolutePathFStream;
AML_STREAM RawAbsolutePathBStream;
UINT8 * RawAbsolutePathBuffer;
UINT32 RawAbsolutePathBufferSize;
AML_STREAM RawAbsolutePathBStream;
UINT8 *RawAbsolutePathBuffer;
UINT32 RawAbsolutePathBufferSize;
AML_NAMESPACE_REF_NODE * NameSpaceRefNode;
AML_NAMESPACE_REF_NODE *NameSpaceRefNode;
if ((!IS_AML_OBJECT_NODE (ParentNode) &&
!IS_AML_ROOT_NODE (ParentNode)) ||
@@ -966,22 +986,25 @@ AmlIsMethodInvocation (
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL) ||
(OutNameSpaceRefNode == NULL)) {
(OutNameSpaceRefNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
// There cannot be a method invocation in a field list. Return.
if (AmlNodeHasAttribute (
(CONST AML_OBJECT_NODE*)ParentNode,
AML_HAS_FIELD_LIST)) {
(CONST AML_OBJECT_NODE *)ParentNode,
AML_HAS_FIELD_LIST
))
{
*OutNameSpaceRefNode = NULL;
return EFI_SUCCESS;
}
// Allocate memory for the raw absolute path.
RawAbsolutePathBufferSize = MAX_AML_NAMESTRING_SIZE;
RawAbsolutePathBuffer = AllocateZeroPool (RawAbsolutePathBufferSize);
RawAbsolutePathBuffer = AllocateZeroPool (RawAbsolutePathBufferSize);
if (RawAbsolutePathBuffer == NULL) {
ASSERT (0);
return EFI_OUT_OF_RESOURCES;
@@ -1018,7 +1041,7 @@ AmlIsMethodInvocation (
"Root node cannot be a method invocation\n"
));
*OutNameSpaceRefNode = NULL;
Status = EFI_SUCCESS;
Status = EFI_SUCCESS;
goto exit_handler;
}
@@ -1049,18 +1072,18 @@ AmlIsMethodInvocation (
// Go through the NameSpaceRefList elements to check for
// a corresponding method definition.
NameSpaceRefNode = NULL;
Status = AmlFindMethodDefinition (
&RawAbsolutePathFStream,
&RawPathNameBStream,
NameSpaceRefList,
&NameSpaceRefNode
);
Status = AmlFindMethodDefinition (
&RawAbsolutePathFStream,
&RawPathNameBStream,
NameSpaceRefList,
&NameSpaceRefNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
goto exit_handler;
}
#if !defined(MDEPKG_NDEBUG)
#if !defined (MDEPKG_NDEBUG)
// Print whether a method definition has been found.
if (NameSpaceRefNode != NULL) {
DEBUG ((
@@ -1073,11 +1096,11 @@ AmlIsMethodInvocation (
NameSpaceRefNode->RawAbsolutePathSize
);
DEBUG ((DEBUG_VERBOSE, ".\n"));
} else {
DEBUG ((DEBUG_VERBOSE, "AmlMethodParser: No method definition found.\n"));
}
#endif // MDEPKG_NDEBUG
#endif // MDEPKG_NDEBUG
*OutNameSpaceRefNode = NameSpaceRefNode;
@@ -1105,27 +1128,28 @@ exit_handler:
EFI_STATUS
EFIAPI
AmlAddNameSpaceReference (
IN CONST AML_OBJECT_NODE * Node,
IN OUT LIST_ENTRY * NameSpaceRefList
IN CONST AML_OBJECT_NODE *Node,
IN OUT LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
AML_NAMESPACE_REF_NODE * NameSpaceRefNode;
EFI_STATUS Status;
AML_NAMESPACE_REF_NODE *NameSpaceRefNode;
AML_STREAM NodeNameFStream;
EAML_PARSE_INDEX NameIndex;
CONST AML_DATA_NODE * NameNode;
AML_STREAM NodeNameFStream;
EAML_PARSE_INDEX NameIndex;
CONST AML_DATA_NODE *NameNode;
AML_STREAM RawAbsolutePathBStream;
UINT32 RawAbsolutePathBStreamSize;
AML_STREAM RawAbsolutePathBStream;
UINT32 RawAbsolutePathBStreamSize;
CHAR8 * AbsolutePathBuffer;
UINT32 AbsolutePathBufferSize;
CHAR8 *AbsolutePathBuffer;
UINT32 AbsolutePathBufferSize;
CONST AML_NODE_HEADER * ParentNode;
CONST AML_NODE_HEADER *ParentNode;
if (!AmlNodeHasAttribute (Node, AML_IN_NAMESPACE) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -1133,7 +1157,7 @@ AmlAddNameSpaceReference (
// Allocate a buffer to get the raw AML absolute pathname of the
// namespace node.
AbsolutePathBufferSize = MAX_AML_NAMESTRING_SIZE;
AbsolutePathBuffer = AllocateZeroPool (AbsolutePathBufferSize);
AbsolutePathBuffer = AllocateZeroPool (AbsolutePathBufferSize);
if (AbsolutePathBuffer == NULL) {
ASSERT (0);
return EFI_OUT_OF_RESOURCES;
@@ -1141,7 +1165,7 @@ AmlAddNameSpaceReference (
Status = AmlStreamInit (
&RawAbsolutePathBStream,
(UINT8*)AbsolutePathBuffer,
(UINT8 *)AbsolutePathBuffer,
AbsolutePathBufferSize,
EAmlStreamDirectionBackward
);
@@ -1161,12 +1185,13 @@ AmlAddNameSpaceReference (
}
// Get the Node name.
NameNode = (CONST AML_DATA_NODE*)AmlGetFixedArgument (
(AML_OBJECT_NODE*)Node,
NameIndex
);
NameNode = (CONST AML_DATA_NODE *)AmlGetFixedArgument (
(AML_OBJECT_NODE *)Node,
NameIndex
);
if (!IS_AML_DATA_NODE (NameNode) ||
(NameNode->DataType != EAmlNodeDataTypeNameString)) {
(NameNode->DataType != EAmlNodeDataTypeNameString))
{
ASSERT (0);
Status = EFI_INVALID_PARAMETER;
goto exit_handler;
@@ -1186,7 +1211,7 @@ AmlAddNameSpaceReference (
goto exit_handler;
}
ParentNode = AmlGetParent ((AML_NODE_HEADER*)Node);
ParentNode = AmlGetParent ((AML_NODE_HEADER *)Node);
if (ParentNode == NULL) {
ASSERT (0);
Status = EFI_INVALID_PARAMETER;
@@ -1214,7 +1239,7 @@ AmlAddNameSpaceReference (
// Create a NameSpace reference node.
Status = AmlCreateMethodRefNode (
Node,
(CONST CHAR8*)AmlStreamGetCurrPos (&RawAbsolutePathBStream),
(CONST CHAR8 *)AmlStreamGetCurrPos (&RawAbsolutePathBStream),
RawAbsolutePathBStreamSize,
&NameSpaceRefNode
);
@@ -1232,7 +1257,7 @@ AmlAddNameSpaceReference (
));
AMLDBG_PRINT_CHARS (
DEBUG_VERBOSE,
(CONST CHAR8*)AmlStreamGetCurrPos (&RawAbsolutePathBStream),
(CONST CHAR8 *)AmlStreamGetCurrPos (&RawAbsolutePathBStream),
AmlStreamGetIndex (&RawAbsolutePathBStream)
);
DEBUG ((DEBUG_VERBOSE, "\n"));
@@ -1275,31 +1300,32 @@ exit_handler:
EFI_STATUS
EFIAPI
AmlCreateMethodInvocationNode (
IN CONST AML_NAMESPACE_REF_NODE * NameSpaceRefNode,
IN AML_DATA_NODE * MethodInvocationName,
OUT AML_OBJECT_NODE ** MethodInvocationNodePtr
IN CONST AML_NAMESPACE_REF_NODE *NameSpaceRefNode,
IN AML_DATA_NODE *MethodInvocationName,
OUT AML_OBJECT_NODE **MethodInvocationNodePtr
)
{
EFI_STATUS Status;
EFI_STATUS Status;
UINT8 ArgCount;
AML_DATA_NODE * ArgCountNode;
AML_NODE_HEADER ** FixedArgs;
AML_OBJECT_NODE * MethodDefinitionNode;
AML_OBJECT_NODE * MethodInvocationNode;
UINT8 ArgCount;
AML_DATA_NODE *ArgCountNode;
AML_NODE_HEADER **FixedArgs;
AML_OBJECT_NODE *MethodDefinitionNode;
AML_OBJECT_NODE *MethodInvocationNode;
if ((NameSpaceRefNode == NULL) ||
!AmlIsMethodDefinitionNode (NameSpaceRefNode->NodeRef) ||
!IS_AML_DATA_NODE (MethodInvocationName) ||
(MethodInvocationName->DataType != EAmlNodeDataTypeNameString) ||
(MethodInvocationNodePtr == NULL)) {
(MethodInvocationNodePtr == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
// Get the number of arguments of the method.
MethodDefinitionNode = (AML_OBJECT_NODE*)NameSpaceRefNode->NodeRef;
FixedArgs = MethodDefinitionNode->FixedArgs;
MethodDefinitionNode = (AML_OBJECT_NODE *)NameSpaceRefNode->NodeRef;
FixedArgs = MethodDefinitionNode->FixedArgs;
// The method definition is an actual method definition.
if (AmlNodeCompareOpCode (MethodDefinitionNode, AML_METHOD_OP, 0)) {
// Cf ACPI 6.3 specification:
@@ -1312,8 +1338,8 @@ AmlCreateMethodInvocationNode (
// bit 4-7: SyncLevel (0x00-0x0f)
// Read the MethodFlags to decode the ArgCount.
ArgCountNode = (AML_DATA_NODE*)FixedArgs[EAmlParseIndexTerm1];
ArgCount = *((UINT8*)ArgCountNode->Buffer) & 0x7;
ArgCountNode = (AML_DATA_NODE *)FixedArgs[EAmlParseIndexTerm1];
ArgCount = *((UINT8 *)ArgCountNode->Buffer) & 0x7;
} else if (AmlNodeCompareOpCode (MethodDefinitionNode, AML_EXTERNAL_OP, 0)) {
// The method definition is an external statement.
// Cf ACPI 6.3 specification:
@@ -1323,8 +1349,8 @@ AmlCreateMethodInvocationNode (
// ArgumentCount := ByteData (0 - 7)
// Read the ArgumentCount.
ArgCountNode = (AML_DATA_NODE*)FixedArgs[EAmlParseIndexTerm2];
ArgCount = *((UINT8*)ArgCountNode->Buffer);
ArgCountNode = (AML_DATA_NODE *)FixedArgs[EAmlParseIndexTerm2];
ArgCount = *((UINT8 *)ArgCountNode->Buffer);
} else {
ASSERT (0);
return EFI_INVALID_PARAMETER;
@@ -1349,7 +1375,7 @@ AmlCreateMethodInvocationNode (
Status = AmlSetFixedArgument (
MethodInvocationNode,
EAmlParseIndexTerm0,
(AML_NODE_HEADER*)MethodInvocationName
(AML_NODE_HEADER *)MethodInvocationName
);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -1359,12 +1385,12 @@ AmlCreateMethodInvocationNode (
// Create a data node holding the number of arguments
// of the method invocation.
ArgCountNode = NULL;
Status = AmlCreateDataNode (
EAmlNodeDataTypeUInt,
&ArgCount,
sizeof (UINT8),
&ArgCountNode
);
Status = AmlCreateDataNode (
EAmlNodeDataTypeUInt,
&ArgCount,
sizeof (UINT8),
&ArgCountNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
goto error_handler;
@@ -1372,10 +1398,10 @@ AmlCreateMethodInvocationNode (
// The second fixed argument is the number of arguments.
Status = AmlSetFixedArgument (
MethodInvocationNode,
EAmlParseIndexTerm1,
(AML_NODE_HEADER*)ArgCountNode
);
MethodInvocationNode,
EAmlParseIndexTerm1,
(AML_NODE_HEADER *)ArgCountNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
goto error_handler;
@@ -1386,9 +1412,9 @@ AmlCreateMethodInvocationNode (
error_handler:
// Delete the sub-tree: the method invocation name is already attached.
AmlDeleteTree ((AML_NODE_HEADER*)MethodInvocationNode);
AmlDeleteTree ((AML_NODE_HEADER *)MethodInvocationNode);
if (ArgCountNode != NULL) {
AmlDeleteNode ((AML_NODE_HEADER*)ArgCountNode);
AmlDeleteNode ((AML_NODE_HEADER *)ArgCountNode);
}
return Status;
@@ -1415,16 +1441,17 @@ error_handler:
EFI_STATUS
EFIAPI
AmlGetMethodInvocationArgCount (
IN CONST AML_OBJECT_NODE * MethodInvocationNode,
OUT BOOLEAN * IsMethodInvocation,
OUT UINT8 * ArgCount
IN CONST AML_OBJECT_NODE *MethodInvocationNode,
OUT BOOLEAN *IsMethodInvocation,
OUT UINT8 *ArgCount
)
{
AML_DATA_NODE * NumArgsNode;
AML_DATA_NODE *NumArgsNode;
if (!IS_AML_NODE_VALID (MethodInvocationNode) ||
(IsMethodInvocation == NULL) ||
(ArgCount == NULL)) {
(ArgCount == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -1432,7 +1459,7 @@ AmlGetMethodInvocationArgCount (
// Check whether MethodInvocationNode is a method invocation.
if (!AmlNodeCompareOpCode (MethodInvocationNode, AML_METHOD_INVOC_OP, 0)) {
*IsMethodInvocation = FALSE;
*ArgCount = 0;
*ArgCount = 0;
return EFI_SUCCESS;
}
@@ -1440,17 +1467,19 @@ AmlGetMethodInvocationArgCount (
// MethodInvocationOp := Pseudo Opcode for Method Invocation
// NameString := Method Name
// ArgumentCount := ByteData (0 - 7)
NumArgsNode = (AML_DATA_NODE*)AmlGetFixedArgument (
(AML_OBJECT_NODE*)MethodInvocationNode,
EAmlParseIndexTerm1
);
NumArgsNode = (AML_DATA_NODE *)AmlGetFixedArgument (
(AML_OBJECT_NODE *)MethodInvocationNode,
EAmlParseIndexTerm1
);
if (!IS_AML_NODE_VALID (NumArgsNode) ||
(NumArgsNode->Buffer == NULL) ||
(NumArgsNode->DataType != EAmlNodeDataTypeUInt) ||
(NumArgsNode->Size != 1)) {
(NumArgsNode->Size != 1))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
*ArgCount = *NumArgsNode->Buffer;
*IsMethodInvocation = TRUE;

View File

@@ -23,20 +23,20 @@
typedef struct AmlNameSpaceRefNode {
/// Double linked list.
/// This must be the first field in this structure.
LIST_ENTRY Link;
LIST_ENTRY Link;
/// Node part of the AML namespace. It must have the AML_IN_NAMESPACE
/// attribute.
CONST AML_OBJECT_NODE * NodeRef;
CONST AML_OBJECT_NODE *NodeRef;
/// Raw AML absolute pathname of the NodeRef.
/// This is a raw AML NameString (cf AmlNameSpace.c: A concatenated list
/// of 4 chars long names. The dual/multi NameString prefix have been
/// stripped.).
CONST CHAR8 * RawAbsolutePath;
CONST CHAR8 *RawAbsolutePath;
/// Size of the raw AML absolute pathname buffer.
UINT32 RawAbsolutePathSize;
UINT32 RawAbsolutePathSize;
} AML_NAMESPACE_REF_NODE;
/** Delete a list of namespace reference nodes.
@@ -49,11 +49,11 @@ typedef struct AmlNameSpaceRefNode {
EFI_STATUS
EFIAPI
AmlDeleteNameSpaceRefList (
IN LIST_ENTRY * NameSpaceRefList
IN LIST_ENTRY *NameSpaceRefList
);
#if !defined (MDEPKG_NDEBUG)
/** Print the list of raw absolute paths of the NameSpace reference list.
@param [in] NameSpaceRefList List of NameSpace reference nodes.
@@ -61,7 +61,7 @@ AmlDeleteNameSpaceRefList (
VOID
EFIAPI
AmlDbgPrintNameSpaceRefList (
IN CONST LIST_ENTRY * NameSpaceRefList
IN CONST LIST_ENTRY *NameSpaceRefList
);
#endif // MDEPKG_NDEBUG
@@ -95,10 +95,10 @@ AmlDbgPrintNameSpaceRefList (
EFI_STATUS
EFIAPI
AmlIsMethodInvocation (
IN CONST AML_NODE_HEADER * ParentNode,
IN CONST AML_STREAM * FStream,
IN CONST LIST_ENTRY * NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE ** OutNameSpaceRefNode
IN CONST AML_NODE_HEADER *ParentNode,
IN CONST AML_STREAM *FStream,
IN CONST LIST_ENTRY *NameSpaceRefList,
OUT AML_NAMESPACE_REF_NODE **OutNameSpaceRefNode
);
/** Create a namespace reference node and add it to the NameSpaceRefList.
@@ -119,8 +119,8 @@ AmlIsMethodInvocation (
EFI_STATUS
EFIAPI
AmlAddNameSpaceReference (
IN CONST AML_OBJECT_NODE * Node,
IN OUT LIST_ENTRY * NameSpaceRefList
IN CONST AML_OBJECT_NODE *Node,
IN OUT LIST_ENTRY *NameSpaceRefList
);
/** Create a method invocation node.
@@ -154,9 +154,9 @@ AmlAddNameSpaceReference (
EFI_STATUS
EFIAPI
AmlCreateMethodInvocationNode (
IN CONST AML_NAMESPACE_REF_NODE * NameSpaceRefNode,
IN AML_DATA_NODE * MethodInvocationName,
OUT AML_OBJECT_NODE ** MethodInvocationNodePtr
IN CONST AML_NAMESPACE_REF_NODE *NameSpaceRefNode,
IN AML_DATA_NODE *MethodInvocationName,
OUT AML_OBJECT_NODE **MethodInvocationNodePtr
);
/** Get the number of arguments of a method invocation node.
@@ -180,9 +180,9 @@ AmlCreateMethodInvocationNode (
EFI_STATUS
EFIAPI
AmlGetMethodInvocationArgCount (
IN CONST AML_OBJECT_NODE * MethodInvocationNode,
OUT BOOLEAN * IsMethodInvocation,
OUT UINT8 * ArgCount
IN CONST AML_OBJECT_NODE *MethodInvocationNode,
OUT BOOLEAN *IsMethodInvocation,
OUT UINT8 *ArgCount
);
#endif // AML_METHOD_PARSER_H_

View File

@@ -69,9 +69,9 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseStream (
IN AML_NODE_HEADER * Node,
IN OUT AML_STREAM * FStream,
IN OUT LIST_ENTRY * NameSpaceRefList
IN AML_NODE_HEADER *Node,
IN OUT AML_STREAM *FStream,
IN OUT LIST_ENTRY *NameSpaceRefList
);
/** Function pointer to parse an AML construct.
@@ -102,10 +102,10 @@ typedef
EFI_STATUS
EFIAPI
(*AML_PARSE_FUNCTION) (
IN CONST AML_NODE_HEADER * Node,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *Node,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
OUT AML_NODE_HEADER **OutNode
);
/** Parse a UInt<X> (where X=8, 16, 32 or 64).
@@ -130,14 +130,14 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseUIntX (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
OUT AML_NODE_HEADER **OutNode
)
{
EFI_STATUS Status;
UINT32 UIntXSize;
EFI_STATUS Status;
UINT32 UIntXSize;
if ((!IS_AML_ROOT_NODE (ParentNode) &&
!IS_AML_OBJECT_NODE (ParentNode)) ||
@@ -148,34 +148,35 @@ AmlParseUIntX (
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
switch (ExpectedFormat) {
case EAmlUInt8:
UIntXSize = 1;
break;
case EAmlUInt16:
UIntXSize = 2;
break;
case EAmlUInt32:
UIntXSize = 4;
break;
case EAmlUInt64:
UIntXSize = 8;
break;
default:
ASSERT (0);
return EFI_INVALID_PARAMETER;
case EAmlUInt8:
UIntXSize = 1;
break;
case EAmlUInt16:
UIntXSize = 2;
break;
case EAmlUInt32:
UIntXSize = 4;
break;
case EAmlUInt64:
UIntXSize = 8;
break;
default:
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Status = AmlCreateDataNode (
AmlTypeToNodeDataType (ExpectedFormat),
AmlStreamGetCurrPos (FStream),
UIntXSize,
(AML_DATA_NODE**)OutNode
(AML_DATA_NODE **)OutNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -216,17 +217,17 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseNameString (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
OUT AML_NODE_HEADER **OutNode
)
{
EFI_STATUS Status;
EFI_STATUS Status;
CONST UINT8 * Buffer;
CONST AML_BYTE_ENCODING * ByteEncoding;
UINT32 StrSize;
CONST UINT8 *Buffer;
CONST AML_BYTE_ENCODING *ByteEncoding;
UINT32 StrSize;
if ((!IS_AML_ROOT_NODE (ParentNode) &&
!IS_AML_OBJECT_NODE (ParentNode)) ||
@@ -234,23 +235,26 @@ AmlParseNameString (
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Buffer = (CONST UINT8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST UINT8 *)AmlStreamGetCurrPos (FStream);
ByteEncoding = AmlGetByteEncoding (Buffer);
if ((ByteEncoding == NULL) ||
((ByteEncoding->Attribute & AML_IS_NAME_CHAR) == 0)) {
((ByteEncoding->Attribute & AML_IS_NAME_CHAR) == 0))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
// Parse the NameString.
Status = AmlGetNameStringSize ((CONST CHAR8*)Buffer, &StrSize);
Status = AmlGetNameStringSize ((CONST CHAR8 *)Buffer, &StrSize);
if ((EFI_ERROR (Status)) ||
(StrSize > AmlStreamGetFreeSpace (FStream))) {
(StrSize > AmlStreamGetFreeSpace (FStream)))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -259,7 +263,7 @@ AmlParseNameString (
EAmlNodeDataTypeNameString,
Buffer,
StrSize,
(AML_DATA_NODE**)OutNode
(AML_DATA_NODE **)OutNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -300,16 +304,16 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseString (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
OUT AML_NODE_HEADER **OutNode
)
{
EFI_STATUS Status;
UINT32 StrSize;
UINT8 Byte;
CONST UINT8 * Buffer;
EFI_STATUS Status;
UINT32 StrSize;
UINT8 Byte;
CONST UINT8 *Buffer;
if ((!IS_AML_ROOT_NODE (ParentNode) &&
!IS_AML_OBJECT_NODE (ParentNode)) ||
@@ -317,12 +321,13 @@ AmlParseString (
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Buffer = (CONST UINT8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST UINT8 *)AmlStreamGetCurrPos (FStream);
StrSize = 0;
// AML String is NULL terminated.
do {
@@ -332,6 +337,7 @@ AmlParseString (
ASSERT (0);
return Status;
}
StrSize++;
} while (Byte != '\0');
@@ -341,7 +347,7 @@ AmlParseString (
AmlTypeToNodeDataType (ExpectedFormat),
Buffer,
StrSize,
(AML_DATA_NODE**)OutNode
(AML_DATA_NODE **)OutNode
);
ASSERT_EFI_ERROR (Status);
@@ -372,21 +378,21 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseObject (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
OUT AML_NODE_HEADER **OutNode
)
{
EFI_STATUS Status;
EFI_STATUS Status;
UINT8 OpCodeSize;
UINT32 PkgLength;
UINT32 PkgOffset;
UINT32 FreeSpace;
UINT8 OpCodeSize;
UINT32 PkgLength;
UINT32 PkgOffset;
UINT32 FreeSpace;
CONST AML_BYTE_ENCODING * AmlByteEncoding;
CONST UINT8 * Buffer;
CONST AML_BYTE_ENCODING *AmlByteEncoding;
CONST UINT8 *Buffer;
if ((!IS_AML_ROOT_NODE (ParentNode) &&
!IS_AML_OBJECT_NODE (ParentNode)) ||
@@ -394,7 +400,8 @@ AmlParseObject (
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -424,16 +431,18 @@ AmlParseObject (
if (EFI_ERROR (Status)) {
ASSERT (0);
}
return Status;
}
// 2. Determine the OpCode size to move the stream forward.
Buffer = (CONST UINT8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST UINT8 *)AmlStreamGetCurrPos (FStream);
if (*Buffer == AML_EXT_OP) {
OpCodeSize = 2;
} else {
OpCodeSize = 1;
}
Status = AmlStreamProgress (FStream, OpCodeSize);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -446,7 +455,7 @@ AmlParseObject (
if (!IS_END_OF_STREAM (FStream)) {
// 3. Parse the PkgLength field, if present.
if ((AmlByteEncoding->Attribute & AML_HAS_PKG_LENGTH) != 0) {
Buffer = (CONST UINT8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST UINT8 *)AmlStreamGetCurrPos (FStream);
PkgOffset = AmlGetPkgLength (Buffer, &PkgLength);
if (PkgOffset == 0) {
ASSERT (0);
@@ -482,7 +491,7 @@ AmlParseObject (
Status = AmlCreateObjectNode (
AmlByteEncoding,
PkgLength,
(AML_OBJECT_NODE**)OutNode
(AML_OBJECT_NODE **)OutNode
);
ASSERT_EFI_ERROR (Status);
@@ -513,32 +522,33 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseFieldPkgLen (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
OUT AML_NODE_HEADER **OutNode
)
{
EFI_STATUS Status;
EFI_STATUS Status1;
CONST UINT8 * Buffer;
UINT32 PkgOffset;
UINT32 PkgLength;
EFI_STATUS Status;
EFI_STATUS Status1;
CONST UINT8 *Buffer;
UINT32 PkgOffset;
UINT32 PkgLength;
if (!AmlNodeHasAttribute (
(CONST AML_OBJECT_NODE*)ParentNode,
(CONST AML_OBJECT_NODE *)ParentNode,
AML_IS_FIELD_ELEMENT
) ||
(ExpectedFormat != EAmlFieldPkgLen) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Buffer = (CONST UINT8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST UINT8 *)AmlStreamGetCurrPos (FStream);
PkgOffset = AmlGetPkgLength (Buffer, &PkgLength);
if (PkgOffset == 0) {
@@ -552,7 +562,7 @@ AmlParseFieldPkgLen (
AmlTypeToNodeDataType (ExpectedFormat),
Buffer,
PkgOffset,
(AML_DATA_NODE**)OutNode
(AML_DATA_NODE **)OutNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -577,7 +587,7 @@ AmlParseFieldPkgLen (
statements. The AML_PARSE_FORMAT enum definition lists these constructs
and the corresponding parsing functions.
*/
AML_PARSE_FUNCTION mParseType[EAmlParseFormatMax] = {
AML_PARSE_FUNCTION mParseType[EAmlParseFormatMax] = {
NULL, // EAmlNone
AmlParseUIntX, // EAmlUInt8
AmlParseUIntX, // EAmlUInt16
@@ -611,23 +621,24 @@ STATIC
EFI_STATUS
EFIAPI
AmlCheckAndParseMethodInvoc (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_DATA_NODE * DataNode,
IN OUT LIST_ENTRY * NameSpaceRefList,
OUT AML_OBJECT_NODE ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_DATA_NODE *DataNode,
IN OUT LIST_ENTRY *NameSpaceRefList,
OUT AML_OBJECT_NODE **OutNode
)
{
EFI_STATUS Status;
AML_NAMESPACE_REF_NODE * NameSpaceRefNode;
AML_OBJECT_NODE * MethodInvocationNode;
AML_STREAM FStream;
EFI_STATUS Status;
AML_NAMESPACE_REF_NODE *NameSpaceRefNode;
AML_OBJECT_NODE *MethodInvocationNode;
AML_STREAM FStream;
if ((!IS_AML_ROOT_NODE (ParentNode) &&
!IS_AML_OBJECT_NODE (ParentNode)) ||
!IS_AML_DATA_NODE (DataNode) ||
(DataNode->DataType != EAmlNodeDataTypeNameString) ||
(NameSpaceRefList == NULL) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -646,12 +657,12 @@ AmlCheckAndParseMethodInvoc (
// Check whether the NameString is a method invocation.
NameSpaceRefNode = NULL;
Status = AmlIsMethodInvocation (
ParentNode,
&FStream,
NameSpaceRefList,
&NameSpaceRefNode
);
Status = AmlIsMethodInvocation (
ParentNode,
&FStream,
NameSpaceRefList,
&NameSpaceRefNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
return Status;
@@ -663,7 +674,7 @@ AmlCheckAndParseMethodInvoc (
// Create a method invocation node.
Status = AmlCreateMethodInvocationNode (
NameSpaceRefNode,
(AML_DATA_NODE*)DataNode,
(AML_DATA_NODE *)DataNode,
&MethodInvocationNode
);
if (EFI_ERROR (Status)) {
@@ -701,17 +712,17 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseArgument (
IN CONST AML_NODE_HEADER * ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM * FStream,
IN OUT LIST_ENTRY * NameSpaceRefList,
OUT AML_NODE_HEADER ** OutNode
IN CONST AML_NODE_HEADER *ParentNode,
IN AML_PARSE_FORMAT ExpectedFormat,
IN OUT AML_STREAM *FStream,
IN OUT LIST_ENTRY *NameSpaceRefList,
OUT AML_NODE_HEADER **OutNode
)
{
EFI_STATUS Status;
AML_PARSE_FUNCTION ParsingFunction;
AML_DATA_NODE * DataNode;
AML_OBJECT_NODE * MethodInvocationNode;
EFI_STATUS Status;
AML_PARSE_FUNCTION ParsingFunction;
AML_DATA_NODE *DataNode;
AML_OBJECT_NODE *MethodInvocationNode;
if ((!IS_AML_ROOT_NODE (ParentNode) &&
!IS_AML_OBJECT_NODE (ParentNode)) ||
@@ -720,7 +731,8 @@ AmlParseArgument (
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL) ||
(OutNode == NULL)) {
(OutNode == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -746,15 +758,17 @@ AmlParseArgument (
// Check whether the parsed argument is a NameString when an object
// is expected. In such case, it could be a method invocation.
DataNode = (AML_DATA_NODE*)*OutNode;
DataNode = (AML_DATA_NODE *)*OutNode;
if (IS_AML_DATA_NODE (DataNode) &&
(DataNode->DataType == EAmlNodeDataTypeNameString) &&
(ExpectedFormat == EAmlObject)) {
(ExpectedFormat == EAmlObject))
{
Status = AmlCheckAndParseMethodInvoc (
ParentNode,
(AML_DATA_NODE*)*OutNode,
(AML_DATA_NODE *)*OutNode,
NameSpaceRefList,
&MethodInvocationNode);
&MethodInvocationNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
return Status;
@@ -764,7 +778,7 @@ AmlParseArgument (
// the NameString has been attached to the MethodInvocationNode.
// Replace the OutNode with the MethodInvocationNode.
if (MethodInvocationNode != NULL) {
*OutNode = (AML_NODE_HEADER*)MethodInvocationNode;
*OutNode = (AML_NODE_HEADER *)MethodInvocationNode;
}
}
@@ -789,20 +803,21 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseByteList (
IN AML_OBJECT_NODE * BufferNode,
IN OUT AML_STREAM * FStream
IN AML_OBJECT_NODE *BufferNode,
IN OUT AML_STREAM *FStream
)
{
EFI_STATUS Status;
AML_NODE_HEADER * NewNode;
CONST UINT8 * Buffer;
UINT32 BufferSize;
EFI_STATUS Status;
AML_NODE_HEADER *NewNode;
CONST UINT8 *Buffer;
UINT32 BufferSize;
// Check whether the node is an Object Node and has byte list.
if (!AmlNodeHasAttribute (BufferNode, AML_HAS_BYTE_LIST) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream)) {
!IS_STREAM_FORWARD (FStream))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -820,14 +835,14 @@ AmlParseByteList (
// Create a single node holding the whole buffer data.
// CreateDataNode checks the Buffer and BufferSize values.
Buffer = (CONST UINT8*)AmlStreamGetCurrPos (FStream);
Buffer = (CONST UINT8 *)AmlStreamGetCurrPos (FStream);
BufferSize = AmlStreamGetFreeSpace (FStream);
Status = AmlCreateDataNode (
EAmlNodeDataTypeRaw,
Buffer,
BufferSize,
(AML_DATA_NODE**)&NewNode
(AML_DATA_NODE **)&NewNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -835,9 +850,9 @@ AmlParseByteList (
}
Status = AmlVarListAddTailInternal (
(AML_NODE_HEADER*)BufferNode,
NewNode
);
(AML_NODE_HEADER *)BufferNode,
NewNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
AmlDeleteTree (NewNode);
@@ -877,19 +892,19 @@ AmlParseByteList (
EFI_STATUS
EFIAPI
AmlParseFixedArguments (
IN AML_OBJECT_NODE * ObjectNode,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_OBJECT_NODE *ObjectNode,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
AML_NODE_HEADER * FixedArgNode;
AML_STREAM FixedArgFStream;
AML_NODE_HEADER *FixedArgNode;
AML_STREAM FixedArgFStream;
EAML_PARSE_INDEX TermIndex;
EAML_PARSE_INDEX MaxIndex;
CONST AML_PARSE_FORMAT * Format;
EAML_PARSE_INDEX TermIndex;
EAML_PARSE_INDEX MaxIndex;
CONST AML_PARSE_FORMAT *Format;
// Fixed arguments of method invocations node are handled differently.
if (!IS_AML_OBJECT_NODE (ObjectNode) ||
@@ -897,17 +912,19 @@ AmlParseFixedArguments (
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
TermIndex = EAmlParseIndexTerm0;
MaxIndex = (EAML_PARSE_INDEX)AmlGetFixedArgumentCount (
(AML_OBJECT_NODE*)ObjectNode
);
MaxIndex = (EAML_PARSE_INDEX)AmlGetFixedArgumentCount (
(AML_OBJECT_NODE *)ObjectNode
);
if ((ObjectNode->AmlByteEncoding != NULL) &&
(ObjectNode->AmlByteEncoding->Format != NULL)) {
(ObjectNode->AmlByteEncoding->Format != NULL))
{
Format = ObjectNode->AmlByteEncoding->Format;
} else {
ASSERT (0);
@@ -917,7 +934,8 @@ AmlParseFixedArguments (
// Parse all the FixedArgs.
while ((TermIndex < MaxIndex) &&
!IS_END_OF_STREAM (FStream) &&
(Format[TermIndex] != EAmlNone)) {
(Format[TermIndex] != EAmlNone))
{
// Initialize a FixedArgStream to parse the current fixed argument.
Status = AmlStreamInitSubStream (FStream, &FixedArgFStream);
if (EFI_ERROR (Status)) {
@@ -927,7 +945,7 @@ AmlParseFixedArguments (
// Parse the current fixed argument.
Status = AmlParseArgument (
(CONST AML_NODE_HEADER*)ObjectNode,
(CONST AML_NODE_HEADER *)ObjectNode,
Format[TermIndex],
&FixedArgFStream,
NameSpaceRefList,
@@ -941,7 +959,7 @@ AmlParseFixedArguments (
// Add the fixed argument to the parent node's fixed argument list.
// FixedArgNode can be an object or data node.
Status = AmlSetFixedArgument (
(AML_OBJECT_NODE*)ObjectNode,
(AML_OBJECT_NODE *)ObjectNode,
TermIndex,
FixedArgNode
);
@@ -957,7 +975,8 @@ AmlParseFixedArguments (
// Parse the AML bytecode of the FixedArgNode if this is an object node.
if (IS_AML_OBJECT_NODE (FixedArgNode) &&
!IS_END_OF_STREAM (&FixedArgFStream)) {
!IS_END_OF_STREAM (&FixedArgFStream))
{
Status = AmlParseStream (
FixedArgNode,
&FixedArgFStream,
@@ -1011,34 +1030,35 @@ AmlParseFixedArguments (
EFI_STATUS
EFIAPI
AmlParseVariableArguments (
IN AML_NODE_HEADER * Node,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_NODE_HEADER *Node,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
BOOLEAN IsMethodInvocation;
UINT8 MethodInvocationArgCount;
BOOLEAN IsMethodInvocation;
UINT8 MethodInvocationArgCount;
AML_NODE_HEADER * VarArgNode;
AML_STREAM VarArgFStream;
AML_NODE_HEADER *VarArgNode;
AML_STREAM VarArgFStream;
if ((!AmlNodeHasAttribute (
(CONST AML_OBJECT_NODE*)Node,
(CONST AML_OBJECT_NODE *)Node,
AML_HAS_CHILD_OBJ
) &&
!IS_AML_ROOT_NODE (Node)) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Status = AmlGetMethodInvocationArgCount (
(CONST AML_OBJECT_NODE*)Node,
(CONST AML_OBJECT_NODE *)Node,
&IsMethodInvocation,
&MethodInvocationArgCount
);
@@ -1077,7 +1097,7 @@ AmlParseVariableArguments (
// Add the variable argument to its parent variable list of arguments.
// VarArgNode can be an object or data node.
Status = AmlVarListAddTailInternal (
(AML_NODE_HEADER*)Node,
(AML_NODE_HEADER *)Node,
VarArgNode
);
if (EFI_ERROR (Status)) {
@@ -1092,7 +1112,8 @@ AmlParseVariableArguments (
// Parse the AML bytecode of the VarArgNode if this is an object node.
if (IS_AML_OBJECT_NODE (VarArgNode) &&
(!IS_END_OF_STREAM (&VarArgFStream))) {
(!IS_END_OF_STREAM (&VarArgFStream)))
{
Status = AmlParseStream (VarArgNode, &VarArgFStream, NameSpaceRefList);
if (EFI_ERROR (Status)) {
ASSERT (0);
@@ -1139,25 +1160,26 @@ STATIC
EFI_STATUS
EFIAPI
AmlPopulateRootNode (
IN AML_ROOT_NODE * RootNode,
IN OUT AML_STREAM * FStream,
IN OUT LIST_ENTRY * NameSpaceRefList
IN AML_ROOT_NODE *RootNode,
IN OUT AML_STREAM *FStream,
IN OUT LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
if (!IS_AML_ROOT_NODE (RootNode) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
// A Root Node only has variable arguments.
Status = AmlParseVariableArguments (
(AML_NODE_HEADER*)RootNode,
(AML_NODE_HEADER *)RootNode,
FStream,
NameSpaceRefList
);
@@ -1184,18 +1206,19 @@ STATIC
EFI_STATUS
EFIAPI
AmlPopulateObjectNode (
IN AML_OBJECT_NODE * ObjectNode,
IN OUT AML_STREAM * FStream,
IN OUT LIST_ENTRY * NameSpaceRefList
IN AML_OBJECT_NODE *ObjectNode,
IN OUT AML_STREAM *FStream,
IN OUT LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
if (!IS_AML_OBJECT_NODE (ObjectNode) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream) ||
(NameSpaceRefList == NULL)) {
(NameSpaceRefList == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -1230,10 +1253,12 @@ AmlPopulateObjectNode (
// This allows to identify method invocations from other namespace
// paths. Method invocation need to be parsed differently.
if (AmlNodeHasAttribute (
(CONST AML_OBJECT_NODE*)ObjectNode,
AML_IN_NAMESPACE)) {
(CONST AML_OBJECT_NODE *)ObjectNode,
AML_IN_NAMESPACE
))
{
Status = AmlAddNameSpaceReference (
(CONST AML_OBJECT_NODE*)ObjectNode,
(CONST AML_OBJECT_NODE *)ObjectNode,
NameSpaceRefList
);
if (EFI_ERROR (Status)) {
@@ -1246,23 +1271,23 @@ AmlPopulateObjectNode (
// Parse the variable list of arguments if present.
if (AmlNodeHasAttribute (ObjectNode, AML_HAS_CHILD_OBJ)) {
Status = AmlParseVariableArguments (
(AML_NODE_HEADER*)ObjectNode,
FStream,
NameSpaceRefList
);
(AML_NODE_HEADER *)ObjectNode,
FStream,
NameSpaceRefList
);
} else if (AmlNodeHasAttribute (ObjectNode, AML_HAS_BYTE_LIST)) {
// Parse the byte list if present.
Status = AmlParseByteList (
ObjectNode,
FStream
);
ObjectNode,
FStream
);
} else if (AmlNodeHasAttribute (ObjectNode, AML_HAS_FIELD_LIST)) {
// Parse the field list if present.
Status = AmlParseFieldList (
ObjectNode,
FStream,
NameSpaceRefList
);
ObjectNode,
FStream,
NameSpaceRefList
);
}
// Check status and assert
@@ -1292,33 +1317,31 @@ STATIC
EFI_STATUS
EFIAPI
AmlParseStream (
IN AML_NODE_HEADER * Node,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_NODE_HEADER *Node,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
)
{
EFI_STATUS Status;
EFI_STATUS Status;
if (IS_AML_ROOT_NODE (Node)) {
Status = AmlPopulateRootNode (
(AML_ROOT_NODE*)Node,
(AML_ROOT_NODE *)Node,
FStream,
NameSpaceRefList
);
if (EFI_ERROR (Status)) {
ASSERT (0);
}
} else if (IS_AML_OBJECT_NODE (Node)) {
Status = AmlPopulateObjectNode (
(AML_OBJECT_NODE*)Node,
(AML_OBJECT_NODE *)Node,
FStream,
NameSpaceRefList
);
if (EFI_ERROR (Status)) {
ASSERT (0);
}
} else {
// Data node or other.
ASSERT (0);
@@ -1346,37 +1369,39 @@ AmlParseStream (
EFI_STATUS
EFIAPI
AmlParseDefinitionBlock (
IN CONST EFI_ACPI_DESCRIPTION_HEADER * DefinitionBlock,
OUT AML_ROOT_NODE ** RootPtr
IN CONST EFI_ACPI_DESCRIPTION_HEADER *DefinitionBlock,
OUT AML_ROOT_NODE **RootPtr
)
{
EFI_STATUS Status;
EFI_STATUS Status1;
AML_STREAM Stream;
AML_ROOT_NODE * Root;
EFI_STATUS Status;
EFI_STATUS Status1;
AML_STREAM Stream;
AML_ROOT_NODE *Root;
LIST_ENTRY NameSpaceRefList;
LIST_ENTRY NameSpaceRefList;
UINT8 * Buffer;
UINT32 MaxBufferSize;
UINT8 *Buffer;
UINT32 MaxBufferSize;
if ((DefinitionBlock == NULL) ||
(RootPtr == NULL)) {
(RootPtr == NULL))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
Buffer = (UINT8*)DefinitionBlock + sizeof (EFI_ACPI_DESCRIPTION_HEADER);
Buffer = (UINT8 *)DefinitionBlock + sizeof (EFI_ACPI_DESCRIPTION_HEADER);
if (DefinitionBlock->Length < sizeof (EFI_ACPI_DESCRIPTION_HEADER)) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
MaxBufferSize = DefinitionBlock->Length -
(UINT32)sizeof (EFI_ACPI_DESCRIPTION_HEADER);
(UINT32)sizeof (EFI_ACPI_DESCRIPTION_HEADER);
// Create a root node.
Status = AmlCreateRootNode (
(EFI_ACPI_DESCRIPTION_HEADER*)DefinitionBlock,
(EFI_ACPI_DESCRIPTION_HEADER *)DefinitionBlock,
&Root
);
if (EFI_ERROR (Status)) {
@@ -1408,7 +1433,7 @@ AmlParseDefinitionBlock (
// Parse the whole AML blob.
Status = AmlParseStream (
(AML_NODE_HEADER*)Root,
(AML_NODE_HEADER *)Root,
&Stream,
&NameSpaceRefList
);
@@ -1432,7 +1457,7 @@ AmlParseDefinitionBlock (
error_handler:
if (Root != NULL) {
AmlDeleteTree ((AML_NODE_HEADER*)Root);
AmlDeleteTree ((AML_NODE_HEADER *)Root);
}
exit_handler:

View File

@@ -33,9 +33,9 @@
EFI_STATUS
EFIAPI
AmlParseFixedArguments (
IN AML_OBJECT_NODE * ObjectNode,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_OBJECT_NODE *ObjectNode,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
);
/** Parse the variable list of arguments of the input ObjectNode.
@@ -64,9 +64,9 @@ AmlParseFixedArguments (
EFI_STATUS
EFIAPI
AmlParseVariableArguments (
IN AML_NODE_HEADER * Node,
IN AML_STREAM * FStream,
IN LIST_ENTRY * NameSpaceRefList
IN AML_NODE_HEADER *Node,
IN AML_STREAM *FStream,
IN LIST_ENTRY *NameSpaceRefList
);
#endif // AML_PARSER_H_

View File

@@ -36,19 +36,20 @@
UINT32
EFIAPI
AmlRdStreamGetRdSize (
IN CONST AML_STREAM * FStream
IN CONST AML_STREAM *FStream
)
{
CONST AML_RD_HEADER * CurrRdElement;
CONST AML_RD_HEADER *CurrRdElement;
if (!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream)) {
!IS_STREAM_FORWARD (FStream))
{
ASSERT (0);
return 0;
}
CurrRdElement = (CONST AML_RD_HEADER*)AmlStreamGetCurrPos (FStream);
CurrRdElement = (CONST AML_RD_HEADER *)AmlStreamGetCurrPos (FStream);
if (CurrRdElement == NULL) {
ASSERT (0);
return 0;
@@ -57,7 +58,8 @@ AmlRdStreamGetRdSize (
// If the resource data element is of the large type, check for overflow.
if (AML_RD_IS_LARGE (CurrRdElement) &&
(AmlStreamGetFreeSpace (FStream) <
sizeof (ACPI_LARGE_RESOURCE_HEADER))) {
sizeof (ACPI_LARGE_RESOURCE_HEADER)))
{
return 0;
}
@@ -86,15 +88,16 @@ STATIC
BOOLEAN
EFIAPI
AmlRdCheckFunctionDescNesting (
IN CONST AML_STREAM * FStream,
IN OUT BOOLEAN * InFunctionDesc
IN CONST AML_STREAM *FStream,
IN OUT BOOLEAN *InFunctionDesc
)
{
CONST AML_RD_HEADER * CurrRdElement;
CONST AML_RD_HEADER *CurrRdElement;
if (!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
(InFunctionDesc == NULL)) {
(InFunctionDesc == NULL))
{
ASSERT (0);
return FALSE;
}
@@ -110,7 +113,10 @@ AmlRdCheckFunctionDescNesting (
if (AmlRdCompareDescId (
CurrRdElement,
AML_RD_BUILD_SMALL_DESC_ID (
ACPI_SMALL_START_DEPENDENT_DESCRIPTOR_NAME))) {
ACPI_SMALL_START_DEPENDENT_DESCRIPTOR_NAME
)
))
{
*InFunctionDesc = TRUE;
return TRUE;
}
@@ -119,7 +125,10 @@ AmlRdCheckFunctionDescNesting (
if (AmlRdCompareDescId (
CurrRdElement,
AML_RD_BUILD_SMALL_DESC_ID (
ACPI_SMALL_END_DEPENDENT_DESCRIPTOR_NAME))) {
ACPI_SMALL_END_DEPENDENT_DESCRIPTOR_NAME
)
))
{
if (*InFunctionDesc) {
*InFunctionDesc = FALSE;
return TRUE;
@@ -155,19 +164,20 @@ AmlRdCheckFunctionDescNesting (
BOOLEAN
EFIAPI
AmlRdIsResourceDataBuffer (
IN CONST AML_STREAM * FStream
IN CONST AML_STREAM *FStream
)
{
EFI_STATUS Status;
UINT32 FreeSpace;
AML_STREAM SubStream;
CONST AML_RD_HEADER * CurrRdElement;
UINT32 CurrRdElementSize;
BOOLEAN InFunctionDesc;
EFI_STATUS Status;
UINT32 FreeSpace;
AML_STREAM SubStream;
CONST AML_RD_HEADER *CurrRdElement;
UINT32 CurrRdElementSize;
BOOLEAN InFunctionDesc;
if (!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream)) {
!IS_STREAM_FORWARD (FStream))
{
ASSERT (0);
return FALSE;
}
@@ -187,19 +197,22 @@ AmlRdIsResourceDataBuffer (
// The first element cannot be an end tag.
if (AmlRdCompareDescId (
CurrRdElement,
AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME))) {
CurrRdElement,
AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME)
))
{
return FALSE;
}
InFunctionDesc = FALSE;
while (TRUE) {
FreeSpace = AmlStreamGetFreeSpace (&SubStream);
CurrRdElement = AmlStreamGetCurrPos (&SubStream);
FreeSpace = AmlStreamGetFreeSpace (&SubStream);
CurrRdElement = AmlStreamGetCurrPos (&SubStream);
CurrRdElementSize = AmlRdStreamGetRdSize (&SubStream);
if ((FreeSpace == 0) ||
(CurrRdElement == NULL) ||
(CurrRdElementSize == 0)) {
(CurrRdElementSize == 0))
{
return FALSE;
}
@@ -218,7 +231,9 @@ AmlRdIsResourceDataBuffer (
// Thus the function should have already returned.
if (AmlRdCompareDescId (
CurrRdElement,
AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME))) {
AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME)
))
{
return FALSE;
}
@@ -252,21 +267,22 @@ AmlRdIsResourceDataBuffer (
EFI_STATUS
EFIAPI
AmlParseResourceData (
IN AML_OBJECT_NODE * BufferNode,
IN AML_STREAM * FStream
IN AML_OBJECT_NODE *BufferNode,
IN AML_STREAM *FStream
)
{
EFI_STATUS Status;
AML_DATA_NODE * NewNode;
UINT32 FreeSpace;
CONST AML_RD_HEADER * CurrRdElement;
UINT32 CurrRdElementSize;
EFI_STATUS Status;
AML_DATA_NODE *NewNode;
UINT32 FreeSpace;
CONST AML_RD_HEADER *CurrRdElement;
UINT32 CurrRdElementSize;
// Check that BufferNode is an ObjectNode and has a ByteList.
if (!AmlNodeHasAttribute (BufferNode, AML_HAS_BYTE_LIST) ||
!IS_STREAM (FStream) ||
IS_END_OF_STREAM (FStream) ||
!IS_STREAM_FORWARD (FStream)) {
!IS_STREAM_FORWARD (FStream))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
@@ -280,12 +296,12 @@ AmlParseResourceData (
break;
}
CurrRdElement = (CONST AML_RD_HEADER*)AmlStreamGetCurrPos (FStream);
CurrRdElement = (CONST AML_RD_HEADER *)AmlStreamGetCurrPos (FStream);
CurrRdElementSize = AmlRdStreamGetRdSize (FStream);
Status = AmlCreateDataNode (
EAmlNodeDataTypeResourceData,
(CONST UINT8*)CurrRdElement,
(CONST UINT8 *)CurrRdElement,
CurrRdElementSize,
&NewNode
);
@@ -295,12 +311,12 @@ AmlParseResourceData (
}
Status = AmlVarListAddTailInternal (
(AML_NODE_HEADER*)BufferNode,
(AML_NODE_HEADER*)NewNode
(AML_NODE_HEADER *)BufferNode,
(AML_NODE_HEADER *)NewNode
);
if (EFI_ERROR (Status)) {
ASSERT (0);
AmlDeleteTree ((AML_NODE_HEADER*)NewNode);
AmlDeleteTree ((AML_NODE_HEADER *)NewNode);
return Status;
}
@@ -315,11 +331,14 @@ AmlParseResourceData (
// Exit the loop when finding the resource data end tag.
if (AmlRdCompareDescId (
CurrRdElement,
AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME))) {
AML_RD_BUILD_SMALL_DESC_ID (ACPI_SMALL_END_TAG_DESCRIPTOR_NAME)
))
{
if (FreeSpace != CurrRdElementSize) {
ASSERT (0);
return EFI_INVALID_PARAMETER;
}
break;
}
} // while

View File

@@ -40,7 +40,7 @@
BOOLEAN
EFIAPI
AmlRdIsResourceDataBuffer (
IN CONST AML_STREAM * FStream
IN CONST AML_STREAM *FStream
);
/** Parse a ResourceDataBuffer.
@@ -63,9 +63,8 @@ AmlRdIsResourceDataBuffer (
EFI_STATUS
EFIAPI
AmlParseResourceData (
IN AML_OBJECT_NODE * BufferNode,
IN AML_STREAM * FStream
IN AML_OBJECT_NODE *BufferNode,
IN AML_STREAM *FStream
);
#endif // AML_RESOURCE_DATA_PARSER_H_