-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- Crc32.c\r
-\r
-Abstract:\r
-\r
- CalculateCrc32 Boot Services as defined in DXE CIS.\r
+/** @file\r
+ This file implements CalculateCrc32 Boot Services as defined in\r
+ Platform Initialization specification 1.0 VOLUME 2 DXE Core Interface.\r
\r
This Boot Services is in the Runtime Driver because this service is\r
also required by SetVirtualAddressMap() when the EFI System Table and\r
- EFI Runtime Services Table are converted from physical address to \r
+ EFI Runtime Services Table are converted from physical address to\r
virtual addresses. This requires that the 32-bit CRC be recomputed.\r
\r
-Revision History:\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
\r
---*/\r
+#include <Uefi.h>\r
+#include <Library/BaseLib.h>\r
\r
+/**\r
+ Calculate CRC32 for target data.\r
\r
-#include <PiDxe.h>\r
+ @param Data The target data.\r
+ @param DataSize The target data size.\r
+ @param CrcOut The CRC32 for target data.\r
\r
-UINT32 mCrcTable[256];\r
+ @retval EFI_SUCCESS The CRC32 for target data is calculated successfully.\r
+ @retval EFI_INVALID_PARAMETER Some parameter is not valid, so the CRC32 is not\r
+ calculated.\r
\r
+**/\r
EFI_STATUS\r
EFIAPI\r
RuntimeDriverCalculateCrc32 (\r
IN UINTN DataSize,\r
OUT UINT32 *CrcOut\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Calculate CRC32 for target data\r
-\r
-Arguments:\r
-\r
- Data - The target data.\r
- DataSize - The target data size.\r
- CrcOut - The CRC32 for target data.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - The CRC32 for target data is calculated successfully.\r
- EFI_INVALID_PARAMETER - Some parameter is not valid, so the CRC32 is not \r
- calculated.\r
-\r
---*/\r
{\r
- UINT32 Crc;\r
- UINTN Index;\r
- UINT8 *Ptr;\r
-\r
- if (Data == NULL || DataSize == 0 || CrcOut == NULL) {\r
+ if ((Data == NULL) || (DataSize == 0) || (CrcOut == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Crc = 0xffffffff;\r
- for (Index = 0, Ptr = Data; Index < DataSize; Index++, Ptr++) {\r
- Crc = (Crc >> 8) ^ mCrcTable[(UINT8) Crc ^ *Ptr];\r
- }\r
-\r
- *CrcOut = Crc ^ 0xffffffff;\r
+ *CrcOut = CalculateCrc32 (Data, DataSize);\r
return EFI_SUCCESS;\r
}\r
-\r
-STATIC\r
-UINT32\r
-ReverseBits (\r
- UINT32 Value\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Reverse bits for 32bit data.\r
-\r
-Arguments:\r
-\r
- Value - the data to be reversed.\r
-\r
-Returns:\r
-\r
- UINT32 data reversed.\r
-\r
---*/\r
-{\r
- UINTN Index;\r
- UINT32 NewValue;\r
-\r
- NewValue = 0;\r
- for (Index = 0; Index < 32; Index++) {\r
- if (Value & (1 << Index)) {\r
- NewValue = NewValue | (1 << (31 - Index));\r
- }\r
- }\r
-\r
- return NewValue;\r
-}\r
-\r
-VOID\r
-RuntimeDriverInitializeCrc32Table (\r
- VOID\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Initialize CRC32 table.\r
-\r
-Arguments:\r
-\r
- None.\r
-\r
-Returns:\r
-\r
- None.\r
-\r
---*/\r
-{\r
- UINTN TableEntry;\r
- UINTN Index;\r
- UINT32 Value;\r
-\r
- for (TableEntry = 0; TableEntry < 256; TableEntry++) {\r
- Value = ReverseBits ((UINT32) TableEntry);\r
- for (Index = 0; Index < 8; Index++) {\r
- if (Value & 0x80000000) {\r
- Value = (Value << 1) ^ 0x04c11db7;\r
- } else {\r
- Value = Value << 1;\r
- }\r
- }\r
-\r
- mCrcTable[TableEntry] = ReverseBits (Value);\r
- }\r
-}\r