diff options
author | wangyue <wangyue41@huawei.com> | 2017-03-18 09:04:11 +0800 |
---|---|---|
committer | Leif Lindholm <leif.lindholm@linaro.org> | 2017-04-11 23:18:19 +0100 |
commit | 229a040b41a83577a5e72b5d3c83bb86040362f6 (patch) | |
tree | 98cbe55cb3083bda6d17f711881060a5246f5cbe | |
parent | d21c52fc6cbd84ccf63b9e3e8c3a86ed81ccf439 (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.c | 24 |
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;
|