mirror of https://github.com/acidanthera/audk.git
EmbeddedPkg: Improve LocateAndInstallAcpiFromFvConditional
LocateAndInstallAcpiFromFvConditional was always returning EFI_SUCCESS even when it failed to find `AcpiFile`. Fix that, and improve the layout by checking if an error occurred and breaking earlier. Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
This commit is contained in:
parent
5aa6842715
commit
a1b0703e8e
|
@ -52,6 +52,9 @@ LocateAndInstallAcpiFromFvConditional (
|
||||||
UINTN AcpiTableSize;
|
UINTN AcpiTableSize;
|
||||||
UINTN AcpiTableKey;
|
UINTN AcpiTableKey;
|
||||||
BOOLEAN Valid;
|
BOOLEAN Valid;
|
||||||
|
BOOLEAN FoundAcpiFile;
|
||||||
|
|
||||||
|
FoundAcpiFile = FALSE;
|
||||||
|
|
||||||
// Ensure the ACPI Table is present
|
// Ensure the ACPI Table is present
|
||||||
Status = gBS->LocateProtocol (
|
Status = gBS->LocateProtocol (
|
||||||
|
@ -107,47 +110,48 @@ LocateAndInstallAcpiFromFvConditional (
|
||||||
&SectionSize,
|
&SectionSize,
|
||||||
&FvStatus
|
&FvStatus
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
AcpiTableKey = 0;
|
|
||||||
AcpiTableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Length;
|
|
||||||
ASSERT (SectionSize >= AcpiTableSize);
|
|
||||||
|
|
||||||
DEBUG ((
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG_ERROR,
|
break;
|
||||||
"- Found '%c%c%c%c' ACPI Table\n",
|
|
||||||
(((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature & 0xFF),
|
|
||||||
((((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature >> 8) & 0xFF),
|
|
||||||
((((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature >> 16) & 0xFF),
|
|
||||||
((((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature >> 24) & 0xFF)
|
|
||||||
));
|
|
||||||
|
|
||||||
// Is the ACPI table valid?
|
|
||||||
if (CheckAcpiTableFunction) {
|
|
||||||
Valid = CheckAcpiTableFunction ((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable);
|
|
||||||
} else {
|
|
||||||
Valid = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Install the ACPI Table
|
|
||||||
if (Valid) {
|
|
||||||
Status = AcpiProtocol->InstallAcpiTable (
|
|
||||||
AcpiProtocol,
|
|
||||||
AcpiTable,
|
|
||||||
AcpiTableSize,
|
|
||||||
&AcpiTableKey
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Free memory allocated by ReadSection
|
|
||||||
gBS->FreePool (AcpiTable);
|
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increment the section instance
|
|
||||||
SectionInstance++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FoundAcpiFile = TRUE;
|
||||||
|
|
||||||
|
AcpiTableKey = 0;
|
||||||
|
AcpiTableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Length;
|
||||||
|
ASSERT (SectionSize >= AcpiTableSize);
|
||||||
|
|
||||||
|
DEBUG ((
|
||||||
|
DEBUG_ERROR,
|
||||||
|
"- Found '%c%c%c%c' ACPI Table\n",
|
||||||
|
(((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature & 0xFF),
|
||||||
|
((((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature >> 8) & 0xFF),
|
||||||
|
((((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature >> 16) & 0xFF),
|
||||||
|
((((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable)->Signature >> 24) & 0xFF)
|
||||||
|
));
|
||||||
|
|
||||||
|
// Is the ACPI table valid?
|
||||||
|
if (CheckAcpiTableFunction != NULL) {
|
||||||
|
Valid = CheckAcpiTableFunction ((EFI_ACPI_DESCRIPTION_HEADER *)AcpiTable);
|
||||||
|
} else {
|
||||||
|
Valid = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Install the ACPI Table
|
||||||
|
if (Valid) {
|
||||||
|
Status = AcpiProtocol->InstallAcpiTable (
|
||||||
|
AcpiProtocol,
|
||||||
|
AcpiTable,
|
||||||
|
AcpiTableSize,
|
||||||
|
&AcpiTableKey
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Free memory allocated by ReadSection
|
||||||
|
gBS->FreePool (AcpiTable);
|
||||||
|
|
||||||
|
// Increment the section instance
|
||||||
|
SectionInstance++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +161,7 @@ FREE_HANDLE_BUFFER:
|
||||||
//
|
//
|
||||||
gBS->FreePool (HandleBuffer);
|
gBS->FreePool (HandleBuffer);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return (FoundAcpiFile ? EFI_SUCCESS : EFI_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue