aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangyue <wangyue41@huawei.com>2017-03-18 09:04:11 +0800
committerLeif Lindholm <leif.lindholm@linaro.org>2017-04-11 23:18:19 +0100
commit229a040b41a83577a5e72b5d3c83bb86040362f6 (patch)
tree98cbe55cb3083bda6d17f711881060a5246f5cbe
parentd21c52fc6cbd84ccf63b9e3e8c3a86ed81ccf439 (diff)
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 <heyi.guo@linaro.org> Signed-off-by: Yi Li <phoenix.liyi@huawei.com> Signed-off-by: Chenhui Sun <chenhui.sun@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
-rw-r--r--Chips/Hisilicon/Drivers/AcpiPlatformDxe/EthMac.c24
1 files changed, 24 insertions, 0 deletions
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;