**/\r
EFI_STATUS\r
AmlParseOptionTerm (\r
- IN AML_BYTE_ENCODING *AmlByteEncoding,\r
- IN UINT8 *Buffer,\r
- IN UINTN MaxBufferSize,\r
- IN AML_OP_PARSE_INDEX TermIndex,\r
- OUT EFI_ACPI_DATA_TYPE *DataType,\r
- OUT VOID **Data,\r
- OUT UINTN *DataSize\r
+ IN AML_BYTE_ENCODING *AmlByteEncoding,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN MaxBufferSize,\r
+ IN AML_OP_PARSE_INDEX TermIndex,\r
+ OUT EFI_ACPI_DATA_TYPE *DataType,\r
+ OUT VOID **Data,\r
+ OUT UINTN *DataSize\r
)\r
{\r
- AML_BYTE_ENCODING *ChildAmlByteEncoding;\r
- EFI_STATUS Status;\r
+ AML_BYTE_ENCODING *ChildAmlByteEncoding;\r
+ EFI_STATUS Status;\r
\r
if (DataType != NULL) {\r
*DataType = AmlTypeToAcpiType (AmlByteEncoding->Format[TermIndex - 1]);\r
}\r
+\r
if (Data != NULL) {\r
*Data = Buffer;\r
}\r
+\r
//\r
// Parse term according to AML type\r
//\r
switch (AmlByteEncoding->Format[TermIndex - 1]) {\r
- case AML_UINT8:\r
- *DataSize = sizeof(UINT8);\r
- break;\r
- case AML_UINT16:\r
- *DataSize = sizeof(UINT16);\r
- break;\r
- case AML_UINT32:\r
- *DataSize = sizeof(UINT32);\r
- break;\r
- case AML_UINT64:\r
- *DataSize = sizeof(UINT64);\r
- break;\r
- case AML_STRING:\r
- *DataSize = AsciiStrSize((CHAR8 *)Buffer);\r
- break;\r
- case AML_NAME:\r
- Status = AmlGetNameStringSize (Buffer, DataSize);\r
- if (EFI_ERROR (Status)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- break;\r
- case AML_OBJECT:\r
- ChildAmlByteEncoding = AmlSearchByOpByte (Buffer);\r
- if (ChildAmlByteEncoding == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- //\r
- // NOTE: We need override DataType here, if there is a case the AML_OBJECT is AML_NAME.\r
- // We need convert type from EFI_ACPI_DATA_TYPE_CHILD to EFI_ACPI_DATA_TYPE_NAME_STRING.\r
- // We should not return CHILD because there is NO OpCode for NameString.\r
- //\r
- if ((ChildAmlByteEncoding->Attribute & AML_IS_NAME_CHAR) != 0) {\r
- if (DataType != NULL) {\r
- *DataType = AmlTypeToAcpiType (AML_NAME);\r
- }\r
+ case AML_UINT8:\r
+ *DataSize = sizeof (UINT8);\r
+ break;\r
+ case AML_UINT16:\r
+ *DataSize = sizeof (UINT16);\r
+ break;\r
+ case AML_UINT32:\r
+ *DataSize = sizeof (UINT32);\r
+ break;\r
+ case AML_UINT64:\r
+ *DataSize = sizeof (UINT64);\r
+ break;\r
+ case AML_STRING:\r
+ *DataSize = AsciiStrSize ((CHAR8 *)Buffer);\r
+ break;\r
+ case AML_NAME:\r
Status = AmlGetNameStringSize (Buffer, DataSize);\r
if (EFI_ERROR (Status)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
break;\r
- }\r
+ case AML_OBJECT:\r
+ ChildAmlByteEncoding = AmlSearchByOpByte (Buffer);\r
+ if (ChildAmlByteEncoding == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
- //\r
- // It is real AML_OBJECT\r
- //\r
- *DataSize = AmlGetObjectSize (\r
- ChildAmlByteEncoding,\r
- Buffer,\r
- MaxBufferSize\r
- );\r
- if (*DataSize == 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- break;\r
- case AML_NONE:\r
+ //\r
+ // NOTE: We need override DataType here, if there is a case the AML_OBJECT is AML_NAME.\r
+ // We need convert type from EFI_ACPI_DATA_TYPE_CHILD to EFI_ACPI_DATA_TYPE_NAME_STRING.\r
+ // We should not return CHILD because there is NO OpCode for NameString.\r
+ //\r
+ if ((ChildAmlByteEncoding->Attribute & AML_IS_NAME_CHAR) != 0) {\r
+ if (DataType != NULL) {\r
+ *DataType = AmlTypeToAcpiType (AML_NAME);\r
+ }\r
+\r
+ Status = AmlGetNameStringSize (Buffer, DataSize);\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ //\r
+ // It is real AML_OBJECT\r
+ //\r
+ *DataSize = AmlGetObjectSize (\r
+ ChildAmlByteEncoding,\r
+ Buffer,\r
+ MaxBufferSize\r
+ );\r
+ if (*DataSize == 0) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ break;\r
+ case AML_NONE:\r
//\r
// No term\r
//\r
- case AML_OPCODE:\r
- default:\r
- ASSERT (FALSE);\r
- return EFI_INVALID_PARAMETER;\r
+ case AML_OPCODE:\r
+ default:\r
+ ASSERT (FALSE);\r
+ return EFI_INVALID_PARAMETER;\r
}\r
+\r
if (*DataSize > MaxBufferSize) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
**/\r
EFI_STATUS\r
AmlParseOptionCommon (\r
- IN AML_BYTE_ENCODING *AmlByteEncoding,\r
- IN UINT8 *Buffer,\r
- IN UINTN MaxBufferSize,\r
- IN AML_OP_PARSE_INDEX Index,\r
- OUT EFI_ACPI_DATA_TYPE *DataType,\r
- OUT VOID **Data,\r
- OUT UINTN *DataSize\r
+ IN AML_BYTE_ENCODING *AmlByteEncoding,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN MaxBufferSize,\r
+ IN AML_OP_PARSE_INDEX Index,\r
+ OUT EFI_ACPI_DATA_TYPE *DataType,\r
+ OUT VOID **Data,\r
+ OUT UINTN *DataSize\r
)\r
{\r
UINT8 *CurrentBuffer;\r
if (Index != AML_OP_PARSE_INDEX_GET_SIZE) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
//\r
// return NameString size\r
//\r
if (EFI_ERROR (Status)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if (*DataSize > MaxBufferSize) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
//\r
if (Index != AML_OP_PARSE_INDEX_GET_SIZE) {\r
*DataType = EFI_ACPI_DATA_TYPE_OPCODE;\r
- *Data = (VOID *)CurrentBuffer;\r
+ *Data = (VOID *)CurrentBuffer;\r
}\r
+\r
if (*CurrentBuffer == AML_EXT_OP) {\r
OpLength = 2;\r
} else {\r
OpLength = 1;\r
}\r
+\r
*DataSize = OpLength;\r
if (Index == AML_OP_PARSE_INDEX_GET_OPCODE) {\r
return EFI_SUCCESS;\r
}\r
+\r
if (OpLength > MaxBufferSize) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
CurrentBuffer += OpLength;\r
\r
//\r
// 2. Skip PkgLength field, if have\r
//\r
if ((AmlByteEncoding->Attribute & AML_HAS_PKG_LENGTH) != 0) {\r
- PkgOffset = AmlGetPkgLength(CurrentBuffer, &PkgLength);\r
+ PkgOffset = AmlGetPkgLength (CurrentBuffer, &PkgLength);\r
//\r
// Override MaxBufferSize if it is valid PkgLength\r
//\r
PkgOffset = 0;\r
PkgLength = 0;\r
}\r
+\r
CurrentBuffer += PkgOffset;\r
\r
//\r
// Parse next one\r
//\r
CurrentBuffer += *DataSize;\r
- TermIndex ++;\r
+ TermIndex++;\r
}\r
\r
//\r
if ((UINTN)CurrentBuffer > (UINTN)Buffer + MaxBufferSize) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if ((UINTN)CurrentBuffer == (UINTN)Buffer + MaxBufferSize) {\r
if (Index != AML_OP_PARSE_INDEX_GET_SIZE) {\r
return EFI_INVALID_PARAMETER;\r
**/\r
UINTN\r
AmlGetObjectSize (\r
- IN AML_BYTE_ENCODING *AmlByteEncoding,\r
- IN UINT8 *Buffer,\r
- IN UINTN MaxBufferSize\r
+ IN AML_BYTE_ENCODING *AmlByteEncoding,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN MaxBufferSize\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN DataSize;\r
+ EFI_STATUS Status;\r
+ UINTN DataSize;\r
\r
Status = AmlParseOptionCommon (\r
- AmlByteEncoding,\r
- Buffer,\r
- MaxBufferSize,\r
- AML_OP_PARSE_INDEX_GET_SIZE,\r
- NULL,\r
- NULL,\r
- &DataSize\r
- );\r
+ AmlByteEncoding,\r
+ Buffer,\r
+ MaxBufferSize,\r
+ AML_OP_PARSE_INDEX_GET_SIZE,\r
+ NULL,\r
+ NULL,\r
+ &DataSize\r
+ );\r
if (EFI_ERROR (Status)) {\r
return 0;\r
} else {\r
**/\r
CHAR8 *\r
AmlGetObjectName (\r
- IN EFI_AML_HANDLE *AmlHandle\r
+ IN EFI_AML_HANDLE *AmlHandle\r
)\r
{\r
AML_BYTE_ENCODING *AmlByteEncoding;\r
break;\r
}\r
}\r
+\r
ASSERT (TermIndex != 0);\r
\r
//\r
if (EFI_ERROR (Status)) {\r
return NULL;\r
}\r
+\r
ASSERT (DataType == EFI_ACPI_DATA_TYPE_NAME_STRING);\r
\r
return NameString;\r
**/\r
EFI_STATUS\r
AmlGetOffsetAfterLastOption (\r
- IN EFI_AML_HANDLE *AmlHandle,\r
- OUT UINT8 **Buffer\r
+ IN EFI_AML_HANDLE *AmlHandle,\r
+ OUT UINT8 **Buffer\r
)\r
{\r
EFI_ACPI_DATA_TYPE DataType;\r
if (DataType == EFI_ACPI_DATA_TYPE_OPCODE) {\r
*Buffer += AmlGetPkgLength (*Buffer, &DataSize);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
**/\r
EFI_STATUS\r
AmlParseOptionHandleCommon (\r
- IN EFI_AML_HANDLE *AmlHandle,\r
- IN AML_OP_PARSE_INDEX Index,\r
- OUT EFI_ACPI_DATA_TYPE *DataType,\r
- OUT VOID **Data,\r
- OUT UINTN *DataSize\r
+ IN EFI_AML_HANDLE *AmlHandle,\r
+ IN AML_OP_PARSE_INDEX Index,\r
+ OUT EFI_ACPI_DATA_TYPE *DataType,\r
+ OUT VOID **Data,\r
+ OUT UINTN *DataSize\r
)\r
{\r
return AmlParseOptionCommon (\r