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:
committed by
mergify[bot]
parent
7c34237831
commit
731c67e1d7
@@ -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,
|
||||
|
@@ -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_
|
||||
|
@@ -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;
|
||||
|
@@ -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_
|
||||
|
@@ -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:
|
||||
|
@@ -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_
|
||||
|
@@ -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
|
||||
|
@@ -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_
|
||||
|
||||
|
Reference in New Issue
Block a user