Skip to content
This repository was archived by the owner on May 5, 2025. It is now read-only.

Commit d824e19

Browse files
haoyu-tangbuildslave
authored andcommitted
Efiwrapper: ACPI protocol check OEM table ID and revision to replace SSDT
Change-Id: Ie06e407d479550a50fe1c86f6e6a2888b2c8f13f Tracked-On: https://jira01.devtools.intel.com/browse/OAM-70444 Signed-off-by: Tang, Haoyu <[email protected]> Reviewed-on: https://android.intel.com:443/649803
1 parent e48f63a commit d824e19

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

drivers/acpi/acpi.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ static void UpdateAcpiGnvs(EFI_ACPI_DESCRIPTION_HEADER *newDsdt,
189189

190190
static EFI_ACPI_DESCRIPTION_HEADER *
191191
FindAcpiTableBySignature(EFI_ACPI_DESCRIPTION_HEADER *Xsdt, UINT32 Signature,
192-
UINT32 *EntryIndex)
192+
UINT32 *EntryIndex, UINT64 OemTableId, UINT32 OemRevision)
193193
{
194194
EFI_ACPI_DESCRIPTION_HEADER *CurrHdr;
195195
UINT64 *XsdtEntry;
@@ -204,7 +204,9 @@ FindAcpiTableBySignature(EFI_ACPI_DESCRIPTION_HEADER *Xsdt, UINT32 Signature,
204204
for (Index = 0; Index < EntryNum; Index++) {
205205
CurrHdr = (EFI_ACPI_DESCRIPTION_HEADER *)XsdtEntry[Index];
206206

207-
if ((CurrHdr != NULL) && (CurrHdr->Signature == Signature)) {
207+
if ((CurrHdr != NULL) && (CurrHdr->Signature == Signature) &&
208+
((OemTableId == 0) || ((OemTableId == CurrHdr->OemTableId) &&
209+
(CurrHdr->OemRevision <= OemRevision)))) {
208210
if (EntryIndex != NULL)
209211
*EntryIndex = Index;
210212

@@ -216,7 +218,7 @@ FindAcpiTableBySignature(EFI_ACPI_DESCRIPTION_HEADER *Xsdt, UINT32 Signature,
216218
}
217219

218220
static EFIAPI EFI_STATUS InstallAcpiTable(__attribute__((__unused__))
219-
EFI_ACPI_TABLE_PROTOCOL *This,
221+
EFI_ACPI_TABLE_PROTOCOL * This,
220222
VOID *AcpiTableBuffer,
221223
UINTN AcpiTableBufferSize,
222224
__attribute__((__unused__))
@@ -232,6 +234,8 @@ static EFIAPI EFI_STATUS InstallAcpiTable(__attribute__((__unused__))
232234
UINT32 Size;
233235
UINT32 EntryNum;
234236
EFI_STATUS Status;
237+
UINT64 OemTableId;
238+
UINT32 OemRevision;
235239

236240
if (Rsdp == NULL)
237241
return EFI_NOT_READY;
@@ -279,14 +283,22 @@ static EFIAPI EFI_STATUS InstallAcpiTable(__attribute__((__unused__))
279283
// Update the ACPI header to pointer to the new copy
280284
// And then update the table if required
281285
AcpiHdr = (EFI_ACPI_DESCRIPTION_HEADER *)NewTable;
282-
286+
if (AcpiHdr->Signature ==
287+
EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) {
288+
//need to check OEM table ID and revision for SSDT
289+
OemTableId = AcpiHdr->OemTableId;
290+
OemRevision = AcpiHdr->OemRevision;
291+
} else {
292+
OemTableId = 0;
293+
OemRevision = 0;
294+
}
283295
if (AcpiHdr->Signature ==
284296
EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) {
285297
Facp = (EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE *)
286298
FindAcpiTableBySignature(
287299
Xsdt,
288300
EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
289-
&EntryIndex);
301+
&EntryIndex, OemTableId, OemRevision);
290302

291303
if (Facp != NULL) { // DSDT override
292304
EFI_ACPI_DESCRIPTION_HEADER *oldDsdt;
@@ -312,10 +324,8 @@ static EFIAPI EFI_STATUS InstallAcpiTable(__attribute__((__unused__))
312324
}
313325
} else {
314326
// Try to find the table to replace
315-
if ((FindAcpiTableBySignature(Xsdt, AcpiHdr->Signature,
316-
&EntryIndex) != NULL) &&
317-
(AcpiHdr->Signature !=
318-
EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)) {
327+
if (FindAcpiTableBySignature(Xsdt, AcpiHdr->Signature,
328+
&EntryIndex, OemTableId, OemRevision) != NULL) {
319329
XsdtEntry[EntryIndex] = (UINT32)(UINTN)AcpiHdr;
320330
} else { // new table, to add
321331
if (EntryNum >= MAX_XSDT_HEADER_ENTRIES) {
@@ -341,7 +351,7 @@ static EFIAPI EFI_STATUS InstallAcpiTable(__attribute__((__unused__))
341351
}
342352

343353
static EFIAPI EFI_STATUS UninstallAcpiTable(__attribute__((__unused__))
344-
EFI_ACPI_TABLE_PROTOCOL *This,
354+
EFI_ACPI_TABLE_PROTOCOL * This,
345355
__attribute__((__unused__))
346356
UINTN TableKey)
347357
{

0 commit comments

Comments
 (0)