8#include <IndustryStandard/Acpi62.h>
10#include <Library/BaseMemoryLib.h>
11#include <Library/DebugLib.h>
12#include <Library/MemoryAllocationLib.h>
13#include <Library/UefiLib.h>
14#include <Library/UefiApplicationEntryPoint.h>
15#include <Library/UefiBootServicesTableLib.h>
16#include <IndustryStandard/AcpiAml.h>
37 IN OUT UINT8 **NamePathStart OPTIONAL,
38 IN OUT UINT8 *PathLength OPTIONAL,
39 IN OUT UINT8 *IsRootPath OPTIONAL
46 if (IsRootPath != NULL) {
50 while (Context->CurrentOpcode[0] == AML_ROOT_CHAR || Context->CurrentOpcode[0] == AML_PARENT_PREFIX_CHAR) {
51 if ((Context->CurrentOpcode[0] == AML_ROOT_CHAR) && (IsRootPath != NULL)) {
58 switch (Context->CurrentOpcode[0]) {
60 if (NamePathStart != NULL) {
62 *NamePathStart = NULL;
65 Context->CurrentOpcode += 1;
68 case AML_DUAL_NAME_PREFIX:
72 if (NamePathStart != NULL) {
74 *NamePathStart = Context->CurrentOpcode;
80 case AML_MULTI_NAME_PREFIX:
84 if (NamePathStart != NULL) {
85 *PathLength = Context->CurrentOpcode[0];
86 *NamePathStart = Context->CurrentOpcode + 1;
89 Context->CurrentOpcode += 1 + Context->CurrentOpcode[0] *
IDENT_LEN;
95 if (NamePathStart != NULL) {
97 *NamePathStart = Context->CurrentOpcode;
103 if (NamePathStart != NULL) {
125 OUT UINT32 *PkgLength
137 LeadByte = Context->CurrentOpcode[0];
139 ByteCount = (LeadByte & 0xC0) >> 6;
146 for (Index = 0; Index < ByteCount; Index++) {
147 TotalSize |= (UINT32)Context->CurrentOpcode[Index] << (Index * 8U + 4);
150 TotalSize |= LeadByte & 0x0F;
151 *PkgLength = TotalSize;
154 *PkgLength = (UINT32)LeadByte;
187 return EFI_DEVICE_ERROR;
199 return EFI_DEVICE_ERROR;
203 return EFI_NOT_FOUND;
231 UINT8 *ScopeNameStart;
232 UINT8 ScopeNameLength;
243 ScopeStart = Context->CurrentOpcode;
244 CurrentPath = Context->CurrentIdentifier;
251 return EFI_DEVICE_ERROR;
254 if ((UINT32)(Context->TableEnd - ScopeStart) < PkgLength) {
255 return EFI_DEVICE_ERROR;
258 ScopeEnd = ScopeStart + PkgLength;
269 return EFI_DEVICE_ERROR;
272 ScopeNameStart = ScopeName;
274 if (Context->CurrentOpcode > ScopeEnd) {
275 return EFI_DEVICE_ERROR;
279 Context->CurrentIdentifier = Context->PathStart;
288 for (Index = 0; Index < ScopeNameLength; ++Index) {
289 if (Context->CurrentIdentifier == Context->PathEnd) {
290 Context->CurrentIdentifier = Context->PathStart;
294 for (Index2 = 0; Index2 <
IDENT_LEN; ++Index2) {
295 if (*(ScopeName + Index2) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index2 - 1))) {
296 Context->CurrentIdentifier = Context->PathStart;
306 Context->CurrentIdentifier += 1;
310 if (Context->CurrentIdentifier == Context->PathEnd) {
311 Context->EntriesFound += 1;
312 if (Context->EntriesFound == Context->RequiredEntry) {
313 *Result = ScopeStart - 1;
320 Context->CurrentIdentifier = Context->PathStart;
325 while (Context->CurrentOpcode < ScopeEnd) {
331 if (Status != EFI_NOT_FOUND) {
338 Context->CurrentIdentifier = CurrentPath;
340 return EFI_NOT_FOUND;
359 UINT8 *CurrentOpcode;
372 return EFI_DEVICE_ERROR;
377 switch (Context->CurrentOpcode[0]) {
378 case AML_BYTE_PREFIX:
382 case AML_WORD_PREFIX:
386 case AML_DWORD_PREFIX:
390 case AML_QWORD_PREFIX:
394 case AML_STRING_PREFIX:
397 }
while (Context->CurrentOpcode[0] >= 0x01 && Context->CurrentOpcode[0] <= 0x7f);
399 if (Context->CurrentOpcode[0] != AML_ZERO_OP) {
400 return EFI_DEVICE_ERROR;
418 case AML_VAR_PACKAGE_OP:
420 CurrentOpcode = Context->CurrentOpcode;
427 return EFI_DEVICE_ERROR;
430 Context->CurrentOpcode = CurrentOpcode;
435 return EFI_DEVICE_ERROR;
439 return EFI_NOT_FOUND;
472 BankStart = Context->CurrentOpcode;
479 return EFI_DEVICE_ERROR;
482 if ((UINT32)(Context->TableEnd - BankStart) < PkgLength) {
483 return EFI_DEVICE_ERROR;
486 BankEnd = BankStart + PkgLength;
497 return EFI_DEVICE_ERROR;
500 if (Context->CurrentOpcode >= BankEnd) {
501 return EFI_DEVICE_ERROR;
504 if (NameLength != 1) {
505 return EFI_DEVICE_ERROR;
508 for (Index = 0; Index <
IDENT_LEN; ++Index) {
509 if (*(Name + Index) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index - 1))) {
510 Context->CurrentOpcode = BankEnd;
512 return EFI_NOT_FOUND;
516 Context->CurrentIdentifier += 1;
520 if (Context->CurrentIdentifier == Context->PathEnd) {
524 Context->CurrentIdentifier -= 1;
532 return EFI_DEVICE_ERROR;
535 Context->CurrentOpcode = BankEnd;
537 return EFI_NOT_FOUND;
547 return EFI_DEVICE_ERROR;
550 if (Context->CurrentOpcode > BankEnd) {
551 return EFI_DEVICE_ERROR;
554 if (NameLength != 1) {
555 return EFI_DEVICE_ERROR;
558 for (Index = 0; Index <
IDENT_LEN; ++Index) {
559 if (*(Name + Index) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index - 1))) {
560 Context->CurrentOpcode = BankEnd;
561 Context->CurrentIdentifier -= 1;
563 return EFI_NOT_FOUND;
567 if (Context->CurrentIdentifier + 1 != Context->PathEnd) {
568 Context->CurrentOpcode = BankEnd;
569 Context->CurrentIdentifier -= 1;
571 return EFI_NOT_FOUND;
574 Context->EntriesFound += 1;
576 if (Context->EntriesFound != Context->RequiredEntry) {
577 Context->CurrentOpcode = BankEnd;
578 Context->CurrentIdentifier -= 1;
580 return EFI_NOT_FOUND;
583 *Result = BankStart - 1;
619 FieldStart = Context->CurrentOpcode;
620 FieldOpcode = Context->CurrentOpcode - 1;
622 switch (Context->CurrentOpcode[0]) {
632 if (*FieldOpcode == AML_EXT_CREATE_FIELD_OP) {
645 return EFI_DEVICE_ERROR;
649 return EFI_NOT_FOUND;
660 return EFI_DEVICE_ERROR;
663 if (NameLength != 1) {
664 return EFI_DEVICE_ERROR;
668 for (Index = 0; Index <
IDENT_LEN; Index++) {
669 if (*(Name + Index) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index - 1))) {
677 switch (Context->CurrentOpcode[0]) {
683 case AML_BYTE_PREFIX:
687 case AML_WORD_PREFIX:
691 case AML_DWORD_PREFIX:
695 case AML_QWORD_PREFIX:
700 if (*FieldOpcode == AML_EXT_CREATE_FIELD_OP) {
713 return EFI_DEVICE_ERROR;
716 if (NameLength != 1) {
717 return EFI_DEVICE_ERROR;
722 return EFI_NOT_FOUND;
725 Context->CurrentIdentifier += 1;
727 for (Index = 0; Index <
IDENT_LEN; Index++) {
728 if (*(Name + Index) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index - 1))) {
730 Context->CurrentIdentifier--;
731 return EFI_NOT_FOUND;
735 Context->CurrentIdentifier += 1;
737 if (Context->CurrentIdentifier != Context->PathEnd) {
739 Context->CurrentIdentifier -= 2;
740 return EFI_NOT_FOUND;
743 Context->EntriesFound += 1;
745 if (Context->EntriesFound != Context->RequiredEntry) {
747 Context->CurrentIdentifier -= 2;
748 return EFI_NOT_FOUND;
751 *Result = FieldStart - 1;
782 return EFI_DEVICE_ERROR;
787 return EFI_NOT_FOUND;
816 return EFI_DEVICE_ERROR;
821 switch (Context->CurrentOpcode[0]) {
827 case AML_BYTE_PREFIX:
831 case AML_WORD_PREFIX:
835 case AML_DWORD_PREFIX:
839 case AML_QWORD_PREFIX:
844 case AML_SUBTRACT_OP:
847 switch (Context->CurrentOpcode[0]) {
853 case AML_BYTE_PREFIX:
857 case AML_WORD_PREFIX:
861 case AML_DWORD_PREFIX:
865 case AML_QWORD_PREFIX:
877 return EFI_DEVICE_ERROR;
885 switch (Context->CurrentOpcode[0]) {
891 case AML_BYTE_PREFIX:
895 case AML_WORD_PREFIX:
899 case AML_DWORD_PREFIX:
903 case AML_QWORD_PREFIX:
915 return EFI_DEVICE_ERROR;
932 return EFI_DEVICE_ERROR;
940 switch (Context->CurrentOpcode[0]) {
946 case AML_BYTE_PREFIX:
950 case AML_WORD_PREFIX:
954 case AML_DWORD_PREFIX:
958 case AML_QWORD_PREFIX:
963 case AML_SUBTRACT_OP:
966 switch (Context->CurrentOpcode[0]) {
972 case AML_BYTE_PREFIX:
976 case AML_WORD_PREFIX:
980 case AML_DWORD_PREFIX:
984 case AML_QWORD_PREFIX:
996 return EFI_DEVICE_ERROR;
1004 switch (Context->CurrentOpcode[0]) {
1010 case AML_BYTE_PREFIX:
1014 case AML_WORD_PREFIX:
1018 case AML_DWORD_PREFIX:
1022 case AML_QWORD_PREFIX:
1034 return EFI_DEVICE_ERROR;
1051 return EFI_DEVICE_ERROR;
1058 return EFI_NOT_FOUND;
1077 UINT8 *CurrentOpcode;
1083 CurrentOpcode = Context->CurrentOpcode;
1090 return EFI_DEVICE_ERROR;
1093 Context->CurrentOpcode = CurrentOpcode;
1096 return EFI_NOT_FOUND;
1114 UINT8 *CurrentOpcode;
1121 CurrentOpcode = Context->CurrentOpcode;
1128 return EFI_DEVICE_ERROR;
1131 Context->CurrentOpcode = CurrentOpcode;
1134 return EFI_NOT_FOUND;
1152 UINT8 *CurrentOpcode;
1159 CurrentOpcode = Context->CurrentOpcode;
1166 return EFI_DEVICE_ERROR;
1169 Context->CurrentOpcode = CurrentOpcode;
1172 return EFI_NOT_FOUND;
1196 UINT32 *CurrentPath;
1200 UINT8 MethodNameLength;
1208 MethodStart = Context->CurrentOpcode;
1209 CurrentPath = Context->CurrentIdentifier;
1216 return EFI_DEVICE_ERROR;
1219 if ((UINT32)(Context->TableEnd - MethodStart) < PkgLength) {
1220 return EFI_DEVICE_ERROR;
1223 MethodEnd = MethodStart + PkgLength;
1225 if (Context->CurrentOpcode >= MethodEnd) {
1226 return EFI_DEVICE_ERROR;
1236 return EFI_DEVICE_ERROR;
1239 if (Context->CurrentOpcode > MethodEnd) {
1240 return EFI_DEVICE_ERROR;
1243 for (Index = 0; Index < MethodNameLength; ++Index) {
1247 if (Context->CurrentIdentifier == Context->PathEnd) {
1248 Context->CurrentOpcode = MethodEnd;
1249 Context->CurrentIdentifier = CurrentPath;
1251 return EFI_NOT_FOUND;
1254 for (Index2 = 0; Index2 <
IDENT_LEN; Index2++) {
1255 if (*(MethodName + Index2) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index2 - 1))) {
1256 Context->CurrentOpcode = MethodEnd;
1257 Context->CurrentIdentifier = CurrentPath;
1259 return EFI_NOT_FOUND;
1263 Context->CurrentIdentifier += 1;
1267 if (Context->CurrentIdentifier != Context->PathEnd) {
1268 Context->CurrentOpcode = MethodEnd;
1269 Context->CurrentIdentifier = CurrentPath;
1271 return EFI_NOT_FOUND;
1274 Context->EntriesFound += 1;
1276 if (Context->EntriesFound != Context->RequiredEntry) {
1277 Context->CurrentOpcode = MethodEnd;
1278 Context->CurrentIdentifier = CurrentPath;
1280 return EFI_NOT_FOUND;
1283 *Result = MethodStart - 1;
1307 UINT32 *CurrentPath;
1315 IfStart = Context->CurrentOpcode;
1316 CurrentPath = Context->CurrentIdentifier;
1323 return EFI_DEVICE_ERROR;
1326 if ((UINT32)(Context->TableEnd - IfStart) < PkgLength) {
1327 return EFI_DEVICE_ERROR;
1330 IfEnd = IfStart + PkgLength;
1335 Status = EFI_NOT_FOUND;
1336 while (Status != EFI_SUCCESS && Context->CurrentOpcode < IfEnd) {
1338 if (Status == EFI_DEVICE_ERROR) {
1339 Context->CurrentOpcode += 1;
1343 if (Status == EFI_DEVICE_ERROR) {
1344 return EFI_DEVICE_ERROR;
1347 if (Status == EFI_SUCCESS) {
1352 if (Context->CurrentOpcode > IfEnd) {
1353 Context->CurrentOpcode = IfEnd;
1356 Context->CurrentIdentifier = CurrentPath;
1360 if (Context->CurrentOpcode[0] == AML_ELSE_OP) {
1362 IfStart = Context->CurrentOpcode;
1369 return EFI_DEVICE_ERROR;
1372 if ((UINT32)(Context->TableEnd - IfStart) < PkgLength) {
1373 return EFI_DEVICE_ERROR;
1376 IfEnd = IfStart + PkgLength;
1381 Status = EFI_NOT_FOUND;
1382 while (Status != EFI_SUCCESS && Context->CurrentOpcode < IfEnd) {
1384 if (Status == EFI_DEVICE_ERROR) {
1385 Context->CurrentOpcode += 1;
1389 if ((Context->CurrentOpcode > IfEnd) || (Status == EFI_DEVICE_ERROR)) {
1390 return EFI_DEVICE_ERROR;
1393 if (Status == EFI_SUCCESS) {
1398 Context->CurrentIdentifier = CurrentPath;
1402 return EFI_NOT_FOUND;
1431 return EFI_DEVICE_ERROR;
1435 return EFI_NOT_FOUND;
1462 UINT8 FieldNameLength;
1463 UINT32 *CurrentPath;
1471 FieldStart = Context->CurrentOpcode;
1478 return EFI_DEVICE_ERROR;
1481 if ((UINT32)(Context->TableEnd - FieldStart) < PkgLength) {
1482 return EFI_DEVICE_ERROR;
1485 FieldEnd = FieldStart + PkgLength;
1487 if (Context->CurrentOpcode >= FieldEnd) {
1488 return EFI_DEVICE_ERROR;
1498 return EFI_DEVICE_ERROR;
1501 if (Context->CurrentOpcode > FieldEnd) {
1502 return EFI_DEVICE_ERROR;
1505 CurrentPath = Context->CurrentIdentifier;
1507 for (Index = 0; Index < FieldNameLength; Index++) {
1508 if (Context->CurrentIdentifier == Context->PathEnd) {
1509 Context->CurrentOpcode = FieldEnd;
1510 Context->CurrentIdentifier = CurrentPath;
1512 return EFI_NOT_FOUND;
1515 for (Index2 = 0; Index2 <
IDENT_LEN; Index2++) {
1516 if (*(FieldName + Index2) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index2 - 1))) {
1517 Context->CurrentOpcode = FieldEnd;
1518 Context->CurrentIdentifier = CurrentPath;
1520 return EFI_NOT_FOUND;
1524 Context->CurrentIdentifier += 1;
1528 if (Context->CurrentIdentifier != Context->PathEnd) {
1529 Context->CurrentOpcode = FieldEnd;
1530 Context->CurrentIdentifier = CurrentPath;
1532 return EFI_NOT_FOUND;
1535 Context->EntriesFound += 1;
1537 if (Context->EntriesFound != Context->RequiredEntry) {
1538 Context->CurrentOpcode = FieldEnd;
1539 Context->CurrentIdentifier = CurrentPath;
1541 return EFI_NOT_FOUND;
1544 *Result = FieldStart - 1;
1574 return EFI_DEVICE_ERROR;
1579 return EFI_NOT_FOUND;
1606 UINT8 FieldNameLength;
1613 FieldStart = Context->CurrentOpcode;
1620 return EFI_DEVICE_ERROR;
1623 if ((UINT32)(Context->TableEnd - FieldStart) < PkgLength) {
1624 return EFI_DEVICE_ERROR;
1627 FieldEnd = FieldStart + PkgLength;
1629 if (Context->CurrentOpcode >= FieldEnd) {
1630 return EFI_DEVICE_ERROR;
1640 return EFI_DEVICE_ERROR;
1643 if (Context->CurrentOpcode >= FieldEnd) {
1644 return EFI_DEVICE_ERROR;
1647 if (FieldNameLength != 1) {
1648 return EFI_DEVICE_ERROR;
1651 for (Index = 0; Index <
IDENT_LEN; ++Index) {
1652 if (*(FieldName + Index) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index - 1))) {
1660 return EFI_DEVICE_ERROR;
1663 Context->CurrentOpcode = FieldEnd;
1665 return EFI_NOT_FOUND;
1669 Context->CurrentIdentifier += 1;
1674 if (Context->CurrentIdentifier == Context->PathEnd) {
1675 return EFI_DEVICE_ERROR;
1687 return EFI_DEVICE_ERROR;
1690 if (Context->CurrentOpcode >= FieldEnd) {
1691 return EFI_DEVICE_ERROR;
1694 if (FieldNameLength != 1) {
1695 return EFI_DEVICE_ERROR;
1698 for (Index = 0; Index <
IDENT_LEN; Index++) {
1699 if (*(FieldName + Index) != *((UINT8 *)Context->CurrentIdentifier + (
IDENT_LEN - Index - 1))) {
1700 Context->CurrentOpcode = FieldEnd;
1701 Context->CurrentIdentifier -= 1;
1703 return EFI_NOT_FOUND;
1707 if (Context->CurrentIdentifier + 1 != Context->PathEnd) {
1708 Context->CurrentOpcode = FieldEnd;
1709 Context->CurrentIdentifier -= 1;
1711 return EFI_NOT_FOUND;
1714 Context->EntriesFound += 1;
1716 if (Context->EntriesFound != Context->RequiredEntry) {
1717 Context->CurrentOpcode = FieldEnd;
1718 Context->CurrentIdentifier -= 1;
1720 return EFI_NOT_FOUND;
1723 *Result = FieldStart - 1;
1740 DEBUG ((DEBUG_VERBOSE,
"Opcode: %x\n", Context->CurrentOpcode[0]));
1742 switch (Context->CurrentOpcode[0]) {
1761 Status = EFI_NOT_FOUND;
1764 case AML_EXT_BANK_FIELD_OP:
1769 case AML_CREATE_DWORD_FIELD_OP:
1770 case AML_CREATE_WORD_FIELD_OP:
1771 case AML_CREATE_BYTE_FIELD_OP:
1772 case AML_CREATE_BIT_FIELD_OP:
1773 case AML_CREATE_QWORD_FIELD_OP:
1774 case AML_EXT_CREATE_FIELD_OP:
1779 case AML_EXTERNAL_OP:
1784 case AML_EXT_REGION_OP:
1789 case AML_EXT_POWER_RES_OP:
1794 case AML_EXT_PROCESSOR_OP:
1799 case AML_EXT_THERMAL_ZONE_OP:
1814 case AML_EXT_DEVICE_OP:
1819 case AML_EXT_EVENT_OP:
1824 case AML_EXT_FIELD_OP:
1829 case AML_EXT_INDEX_FIELD_OP:
1834 case AML_EXT_MUTEX_OP:
1840 Status = EFI_DEVICE_ERROR;
1861 IN CONST CHAR8 *Name,
1862 IN CONST CHAR8 *NameEnd,
1863 OUT UINT32 *OpcodeName
1866 UINT32 CurrentOpcode;
1871 NameLength = (UINT8)(NameEnd - Name);
1875 return EFI_INVALID_PARAMETER;
1878 for (Index = 0; Index <
IDENT_LEN; ++Index) {
1879 if (Index < NameLength) {
1880 if ((Name[Index] >=
'a') && (Name[Index] <=
'z')) {
1881 CurrentOpcode = AML_NAME_CHAR_A + (Name[Index] -
'a');
1882 }
else if ((Name[Index] >=
'A') && (Name[Index] <=
'Z')) {
1883 CurrentOpcode = AML_NAME_CHAR_A + (Name[Index] -
'A');
1884 }
else if ((Name[Index] >=
'0') && (Name[Index] <=
'9')) {
1886 CurrentOpcode = AML_EXT_REVISION_OP + (Name[Index] -
'0');
1887 }
else if (Name[Index] ==
'_') {
1888 CurrentOpcode = AML_NAME_CHAR__;
1889 }
else if (Name[Index] ==
'\\') {
1891 return EFI_INVALID_PARAMETER;
1894 return EFI_INVALID_PARAMETER;
1897 CurrentOpcode = AML_NAME_CHAR__;
1901 *OpcodeName |= CurrentOpcode;
1919 IN CONST CHAR8 *PathString
1926 CHAR8 *IdentifierStart;
1927 CONST CHAR8 *PathStringEnd;
1930 ASSERT (Context != NULL);
1931 ASSERT (PathString != NULL);
1933 if (PathString[0] ==
'\\') {
1937 AsciiLength = AsciiStrLen (PathString);
1938 if (AsciiLength == 0) {
1939 return EFI_INVALID_PARAMETER;
1943 PathStringEnd = PathString + AsciiLength;
1945 for (Index = 0; Index < AsciiLength; Index++) {
1946 if (PathString[Index] ==
'.') {
1952 Context->PathStart = (UINT32 *)AllocateZeroPool (
sizeof (UINT32) * PathLength);
1953 if (Context->PathStart == NULL) {
1954 return EFI_OUT_OF_RESOURCES;
1957 Context->CurrentIdentifier = Context->PathStart;
1958 Walker = (CHAR8 *)PathString;
1959 IdentifierStart = (CHAR8 *)PathString;
1961 for (Index = 0; Index < PathLength; ++Index) {
1962 while (*Walker !=
'.' && Walker < PathStringEnd) {
1966 if (Walker - IdentifierStart < 1) {
1967 return EFI_INVALID_PARAMETER;
1973 (UINT32 *)(Context->CurrentIdentifier + Index)
1975 if (EFI_ERROR (Status)) {
1980 IdentifierStart = Walker;
1983 Context->PathEnd = Context->CurrentIdentifier + PathLength;
1997 ASSERT (Context != NULL);
1999 ZeroMem (Context,
sizeof (*Context));
2012 if (Context->PathStart != NULL) {
2013 FreePool (Context->PathStart);
2014 Context->PathStart = NULL;
2017 ZeroMem (Context,
sizeof (*Context));
2023 IN CONST CHAR8 *PathString,
2026 IN UINT32 TableLength OPTIONAL
2034 ASSERT (PathString != NULL);
2037 if (TableLength > 0) {
2038 if (TableLength <
sizeof (EFI_ACPI_COMMON_HEADER)) {
2039 DEBUG ((DEBUG_VERBOSE,
"OCA: Got bad table format which does not specify its length!\n"));
2040 return EFI_LOAD_ERROR;
2047 TableLength = ((EFI_ACPI_COMMON_HEADER *)Table)->Length;
2050 if (TableLength <=
sizeof (EFI_ACPI_DESCRIPTION_HEADER)) {
2051 DEBUG ((DEBUG_VERBOSE,
"OCA: Bad or unsupported table header!\n"));
2052 return EFI_DEVICE_ERROR;
2060 Context.
TableEnd = Table + TableLength;
2061 Context.
CurrentOpcode +=
sizeof (EFI_ACPI_DESCRIPTION_HEADER);
2068 if (EFI_ERROR (Status)) {
2076 if (!EFI_ERROR (Status)) {
2077 *Offset = (UINT32)(Result - Table);
2082 if (Status != EFI_NOT_FOUND) {
2089 return EFI_NOT_FOUND;
STATIC EFI_STATUS ParseIndexField(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
STATIC EFI_STATUS ParseOpRegion(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseExternal(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseNameString(IN OUT ACPI_PARSER_CONTEXT *Context, IN OUT UINT8 **NamePathStart OPTIONAL, IN OUT UINT8 *PathLength OPTIONAL, IN OUT UINT8 *IsRootPath OPTIONAL)
VOID InitContext(OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParsePowerRes(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParsePkgLength(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT32 *PkgLength)
STATIC EFI_STATUS ParseMethod(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
STATIC EFI_STATUS ParseName(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseCreateField(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
STATIC EFI_STATUS ParseProcessor(IN OUT ACPI_PARSER_CONTEXT *Context)
EFI_STATUS InternalAcpiParseTerm(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
EFI_STATUS TranslateNameToOpcodes(IN CONST CHAR8 *Name, IN CONST CHAR8 *NameEnd, OUT UINT32 *OpcodeName)
STATIC EFI_STATUS ParseScopeOrDevice(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
STATIC EFI_STATUS ParseEvent(IN OUT ACPI_PARSER_CONTEXT *Context)
EFI_STATUS GetOpcodeArray(IN OUT ACPI_PARSER_CONTEXT *Context, IN CONST CHAR8 *PathString)
STATIC EFI_STATUS ParseAlias(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseField(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
EFI_STATUS AcpiFindEntryInMemory(IN UINT8 *Table, IN CONST CHAR8 *PathString, IN UINT8 Entry, OUT UINT32 *Offset, IN UINT32 TableLength OPTIONAL)
STATIC EFI_STATUS ParseMutex(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseIfElse(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
VOID ClearContext(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseThermalZone(IN OUT ACPI_PARSER_CONTEXT *Context)
STATIC EFI_STATUS ParseBankField(IN OUT ACPI_PARSER_CONTEXT *Context, OUT UINT8 **Result)
#define CONTEXT_CONSUME_BYTES(Context, Bytes)
#define CONTEXT_ADVANCE_OPCODE(Context)
#define CONTEXT_PEEK_BYTES(Context, Bytes)
#define PRINT_ACPI_NAME(Str, Name, Length)
#define CONTEXT_INCREASE_NESTING(Context)
#define CONTEXT_HAS_WORK(Context)
#define CONTEXT_DECREASE_NESTING(Context)
#define CONTEXT_ENTER(Context, Name)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)