From 229a040b41a83577a5e72b5d3c83bb86040362f6 Mon Sep 17 00:00:00 2001 From: wangyue Date: Sat, 18 Mar 2017 09:04:11 +0800 Subject: Hisilicon: Fix ACPI/DSDT table checksum error Refresh checksum after changing DSDT table. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Heyi Guo Signed-off-by: Yi Li Signed-off-by: Chenhui Sun Reviewed-by: Leif Lindholm --- Chips/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Chips/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c b/Chips/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c index 41f5692..1f74d31 100644 --- a/Chips/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c +++ b/Chips/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c @@ -442,6 +442,29 @@ static EFI_STATUS ProcessDSDT( return EFI_SUCCESS; } +STATIC +VOID +AcpiCheckSum ( + IN OUT EFI_ACPI_SDT_HEADER *Table + ) +{ + UINTN ChecksumOffset; + UINT8 *Buffer; + + ChecksumOffset = OFFSET_OF (EFI_ACPI_DESCRIPTION_HEADER, Checksum); + Buffer = (UINT8 *)Table; + + // + // set checksum to 0 first + // + Buffer[ChecksumOffset] = 0; + + // + // Update checksum value + // + Buffer[ChecksumOffset] = CalculateCheckSum8 (Buffer, Table->Length); +} + EFI_STATUS EthMacInit(void) { EFI_STATUS Status; @@ -478,6 +501,7 @@ EFI_STATUS EthMacInit(void) ProcessDSDT(AcpiTableProtocol, TableHandle); AcpiTableProtocol->Close(TableHandle); + AcpiCheckSum (Table); } return EFI_SUCCESS; -- cgit v1.2.3