Saves Table to disk as DirName\\FileName (DirName != NULL) * or just prints basic table data to log (DirName == NULL). */
| 1003 | * or just prints basic table data to log (DirName == NULL). |
| 1004 | */ |
| 1005 | EFI_STATUS DumpTable(EFI_ACPI_DESCRIPTION_HEADER *TableEntry, CONST CHAR8 *CheckSignature, CONST CHAR16 *DirName, const XStringW& FileName, CONST CHAR16 *FileNamePrefix, INTN *SsdtCount) |
| 1006 | { |
| 1007 | EFI_STATUS Status; |
| 1008 | CHAR8 Signature[5]; |
| 1009 | CHAR8 OemTableId[9]; |
| 1010 | |
| 1011 | // Take Signature and OemId for printing |
| 1012 | CopyMem(&Signature[0], &TableEntry->Signature, 4); |
| 1013 | Signature[4] = 0; |
| 1014 | CopyMem(&OemTableId[0], &TableEntry->OemTableId, 8); |
| 1015 | OemTableId[8] = 0; |
| 1016 | stripTrailingSpaces(OemTableId); |
| 1017 | |
| 1018 | DBG(" %p: '%s', '%s', Rev: %d, Len: %d", TableEntry, Signature, OemTableId, TableEntry->Revision, TableEntry->Length); |
| 1019 | |
| 1020 | // |
| 1021 | // Additional checks |
| 1022 | // |
| 1023 | if (CheckSignature != NULL && AsciiStrCmp(Signature, CheckSignature) != 0) { |
| 1024 | DBG(" -> invalid signature, expecting %s\n", CheckSignature); |
| 1025 | return EFI_INVALID_PARAMETER; |
| 1026 | } |
| 1027 | // XSDT checks |
| 1028 | if (TableEntry->Signature == EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { |
| 1029 | if (TableEntry->Length < sizeof(XSDT_TABLE)) { |
| 1030 | DBG(" -> invalid length\n"); |
| 1031 | return EFI_INVALID_PARAMETER; |
| 1032 | } |
| 1033 | } |
| 1034 | // RSDT checks |
| 1035 | if (TableEntry->Signature == EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { |
| 1036 | if (TableEntry->Length < sizeof(RSDT_TABLE)) { |
| 1037 | DBG(" -> invalid length\n"); |
| 1038 | return EFI_INVALID_PARAMETER; |
| 1039 | } |
| 1040 | } |
| 1041 | // FADT/FACP checks |
| 1042 | if (TableEntry->Signature == EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE) { |
| 1043 | if (TableEntry->Length < sizeof(EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE)) { |
| 1044 | DBG(" -> invalid length\n"); |
| 1045 | return EFI_INVALID_PARAMETER; |
| 1046 | } |
| 1047 | } |
| 1048 | // DSDT checks |
| 1049 | if (TableEntry->Signature == EFI_ACPI_1_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { |
| 1050 | if (TableEntry->Length < sizeof(EFI_ACPI_DESCRIPTION_HEADER)) { |
| 1051 | DBG(" -> invalid length\n"); |
| 1052 | return EFI_INVALID_PARAMETER; |
| 1053 | } |
| 1054 | } |
| 1055 | // SSDT checks |
| 1056 | if (TableEntry->Signature == EFI_ACPI_1_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { |
| 1057 | if (TableEntry->Length < sizeof(EFI_ACPI_DESCRIPTION_HEADER)) { |
| 1058 | DBG(" -> invalid length\n"); |
| 1059 | return EFI_INVALID_PARAMETER; |
| 1060 | } |
| 1061 | } |
| 1062 |
no test coverage detected