]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg BaseLib: Add new API CalculateCrc32()
authorLiming Gao <liming.gao@intel.com>
Fri, 8 Sep 2017 05:18:24 +0000 (13:18 +0800)
committerLiming Gao <liming.gao@intel.com>
Tue, 10 Oct 2017 10:10:15 +0000 (18:10 +0800)
CalculateCrc32() bases on the initialized mCrcTable. When CalculateCrc32()
is used, mCrcTable will take 1KB size in the image. When CalculateCrc32()
is not used, mCrcTable will not be built in the image, and no size impact.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Liming Gao <liming.gao@intel.com>
MdePkg/Include/Library/BaseLib.h
MdePkg/Library/BaseLib/CheckSum.c

index 40b96b761a85fc44abb3abe4dde768033ee12f38..d33c3b6b38ea24d7336fb8a7fdc5d6a710875323 100644 (file)
@@ -4829,6 +4829,25 @@ CalculateCheckSum64 (
   IN      UINTN                     Length\r
   );\r
 \r
+/**\r
+  Computes and returns a 32-bit CRC for a data buffer.\r
+  CRC32 value bases on ITU-T V.42.\r
+\r
+  If Buffer is NULL, then ASSERT().\r
+  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
+\r
+  @param[in]  Buffer       A pointer to the buffer on which the 32-bit CRC is to be computed.\r
+  @param[in]  Length       The number of bytes in the buffer Data.\r
+\r
+  @retval Crc32            The 32-bit CRC was computed for the data buffer.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+CalculateCrc32(\r
+  IN  VOID                         *Buffer,\r
+  IN  UINTN                        Length\r
+  );\r
 \r
 //\r
 // Base Library CPU Functions\r
index 29688291bb2bac16aefff9b3112bc06048f9fe9a..677b36fca6d19fd107d6d7c76ea30201e93ee53b 100644 (file)
@@ -334,4 +334,299 @@ CalculateCheckSum64 (
   return (UINT64) ((UINT64)(-1) - CheckSum + 1);\r
 }\r
 \r
+GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32  mCrcTable[256] = {\r
+  0x00000000,\r
+  0x77073096,\r
+  0xEE0E612C,\r
+  0x990951BA,\r
+  0x076DC419,\r
+  0x706AF48F,\r
+  0xE963A535,\r
+  0x9E6495A3,\r
+  0x0EDB8832,\r
+  0x79DCB8A4,\r
+  0xE0D5E91E,\r
+  0x97D2D988,\r
+  0x09B64C2B,\r
+  0x7EB17CBD,\r
+  0xE7B82D07,\r
+  0x90BF1D91,\r
+  0x1DB71064,\r
+  0x6AB020F2,\r
+  0xF3B97148,\r
+  0x84BE41DE,\r
+  0x1ADAD47D,\r
+  0x6DDDE4EB,\r
+  0xF4D4B551,\r
+  0x83D385C7,\r
+  0x136C9856,\r
+  0x646BA8C0,\r
+  0xFD62F97A,\r
+  0x8A65C9EC,\r
+  0x14015C4F,\r
+  0x63066CD9,\r
+  0xFA0F3D63,\r
+  0x8D080DF5,\r
+  0x3B6E20C8,\r
+  0x4C69105E,\r
+  0xD56041E4,\r
+  0xA2677172,\r
+  0x3C03E4D1,\r
+  0x4B04D447,\r
+  0xD20D85FD,\r
+  0xA50AB56B,\r
+  0x35B5A8FA,\r
+  0x42B2986C,\r
+  0xDBBBC9D6,\r
+  0xACBCF940,\r
+  0x32D86CE3,\r
+  0x45DF5C75,\r
+  0xDCD60DCF,\r
+  0xABD13D59,\r
+  0x26D930AC,\r
+  0x51DE003A,\r
+  0xC8D75180,\r
+  0xBFD06116,\r
+  0x21B4F4B5,\r
+  0x56B3C423,\r
+  0xCFBA9599,\r
+  0xB8BDA50F,\r
+  0x2802B89E,\r
+  0x5F058808,\r
+  0xC60CD9B2,\r
+  0xB10BE924,\r
+  0x2F6F7C87,\r
+  0x58684C11,\r
+  0xC1611DAB,\r
+  0xB6662D3D,\r
+  0x76DC4190,\r
+  0x01DB7106,\r
+  0x98D220BC,\r
+  0xEFD5102A,\r
+  0x71B18589,\r
+  0x06B6B51F,\r
+  0x9FBFE4A5,\r
+  0xE8B8D433,\r
+  0x7807C9A2,\r
+  0x0F00F934,\r
+  0x9609A88E,\r
+  0xE10E9818,\r
+  0x7F6A0DBB,\r
+  0x086D3D2D,\r
+  0x91646C97,\r
+  0xE6635C01,\r
+  0x6B6B51F4,\r
+  0x1C6C6162,\r
+  0x856530D8,\r
+  0xF262004E,\r
+  0x6C0695ED,\r
+  0x1B01A57B,\r
+  0x8208F4C1,\r
+  0xF50FC457,\r
+  0x65B0D9C6,\r
+  0x12B7E950,\r
+  0x8BBEB8EA,\r
+  0xFCB9887C,\r
+  0x62DD1DDF,\r
+  0x15DA2D49,\r
+  0x8CD37CF3,\r
+  0xFBD44C65,\r
+  0x4DB26158,\r
+  0x3AB551CE,\r
+  0xA3BC0074,\r
+  0xD4BB30E2,\r
+  0x4ADFA541,\r
+  0x3DD895D7,\r
+  0xA4D1C46D,\r
+  0xD3D6F4FB,\r
+  0x4369E96A,\r
+  0x346ED9FC,\r
+  0xAD678846,\r
+  0xDA60B8D0,\r
+  0x44042D73,\r
+  0x33031DE5,\r
+  0xAA0A4C5F,\r
+  0xDD0D7CC9,\r
+  0x5005713C,\r
+  0x270241AA,\r
+  0xBE0B1010,\r
+  0xC90C2086,\r
+  0x5768B525,\r
+  0x206F85B3,\r
+  0xB966D409,\r
+  0xCE61E49F,\r
+  0x5EDEF90E,\r
+  0x29D9C998,\r
+  0xB0D09822,\r
+  0xC7D7A8B4,\r
+  0x59B33D17,\r
+  0x2EB40D81,\r
+  0xB7BD5C3B,\r
+  0xC0BA6CAD,\r
+  0xEDB88320,\r
+  0x9ABFB3B6,\r
+  0x03B6E20C,\r
+  0x74B1D29A,\r
+  0xEAD54739,\r
+  0x9DD277AF,\r
+  0x04DB2615,\r
+  0x73DC1683,\r
+  0xE3630B12,\r
+  0x94643B84,\r
+  0x0D6D6A3E,\r
+  0x7A6A5AA8,\r
+  0xE40ECF0B,\r
+  0x9309FF9D,\r
+  0x0A00AE27,\r
+  0x7D079EB1,\r
+  0xF00F9344,\r
+  0x8708A3D2,\r
+  0x1E01F268,\r
+  0x6906C2FE,\r
+  0xF762575D,\r
+  0x806567CB,\r
+  0x196C3671,\r
+  0x6E6B06E7,\r
+  0xFED41B76,\r
+  0x89D32BE0,\r
+  0x10DA7A5A,\r
+  0x67DD4ACC,\r
+  0xF9B9DF6F,\r
+  0x8EBEEFF9,\r
+  0x17B7BE43,\r
+  0x60B08ED5,\r
+  0xD6D6A3E8,\r
+  0xA1D1937E,\r
+  0x38D8C2C4,\r
+  0x4FDFF252,\r
+  0xD1BB67F1,\r
+  0xA6BC5767,\r
+  0x3FB506DD,\r
+  0x48B2364B,\r
+  0xD80D2BDA,\r
+  0xAF0A1B4C,\r
+  0x36034AF6,\r
+  0x41047A60,\r
+  0xDF60EFC3,\r
+  0xA867DF55,\r
+  0x316E8EEF,\r
+  0x4669BE79,\r
+  0xCB61B38C,\r
+  0xBC66831A,\r
+  0x256FD2A0,\r
+  0x5268E236,\r
+  0xCC0C7795,\r
+  0xBB0B4703,\r
+  0x220216B9,\r
+  0x5505262F,\r
+  0xC5BA3BBE,\r
+  0xB2BD0B28,\r
+  0x2BB45A92,\r
+  0x5CB36A04,\r
+  0xC2D7FFA7,\r
+  0xB5D0CF31,\r
+  0x2CD99E8B,\r
+  0x5BDEAE1D,\r
+  0x9B64C2B0,\r
+  0xEC63F226,\r
+  0x756AA39C,\r
+  0x026D930A,\r
+  0x9C0906A9,\r
+  0xEB0E363F,\r
+  0x72076785,\r
+  0x05005713,\r
+  0x95BF4A82,\r
+  0xE2B87A14,\r
+  0x7BB12BAE,\r
+  0x0CB61B38,\r
+  0x92D28E9B,\r
+  0xE5D5BE0D,\r
+  0x7CDCEFB7,\r
+  0x0BDBDF21,\r
+  0x86D3D2D4,\r
+  0xF1D4E242,\r
+  0x68DDB3F8,\r
+  0x1FDA836E,\r
+  0x81BE16CD,\r
+  0xF6B9265B,\r
+  0x6FB077E1,\r
+  0x18B74777,\r
+  0x88085AE6,\r
+  0xFF0F6A70,\r
+  0x66063BCA,\r
+  0x11010B5C,\r
+  0x8F659EFF,\r
+  0xF862AE69,\r
+  0x616BFFD3,\r
+  0x166CCF45,\r
+  0xA00AE278,\r
+  0xD70DD2EE,\r
+  0x4E048354,\r
+  0x3903B3C2,\r
+  0xA7672661,\r
+  0xD06016F7,\r
+  0x4969474D,\r
+  0x3E6E77DB,\r
+  0xAED16A4A,\r
+  0xD9D65ADC,\r
+  0x40DF0B66,\r
+  0x37D83BF0,\r
+  0xA9BCAE53,\r
+  0xDEBB9EC5,\r
+  0x47B2CF7F,\r
+  0x30B5FFE9,\r
+  0xBDBDF21C,\r
+  0xCABAC28A,\r
+  0x53B39330,\r
+  0x24B4A3A6,\r
+  0xBAD03605,\r
+  0xCDD70693,\r
+  0x54DE5729,\r
+  0x23D967BF,\r
+  0xB3667A2E,\r
+  0xC4614AB8,\r
+  0x5D681B02,\r
+  0x2A6F2B94,\r
+  0xB40BBE37,\r
+  0xC30C8EA1,\r
+  0x5A05DF1B,\r
+  0x2D02EF8D\r
+};\r
 \r
+/**\r
+  Computes and returns a 32-bit CRC for a data buffer.\r
+  CRC32 value bases on ITU-T V.42.\r
+\r
+  If Buffer is NULL, then ASSERT().\r
+  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().\r
+\r
+  @param[in]  Buffer       A pointer to the buffer on which the 32-bit CRC is to be computed.\r
+  @param[in]  Length       The number of bytes in the buffer Data.\r
+\r
+  @retval Crc32            The 32-bit CRC was computed for the data buffer.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+CalculateCrc32(\r
+  IN  VOID                         *Buffer,\r
+  IN  UINTN                        Length\r
+  )\r
+{\r
+  UINTN   Index;\r
+  UINT32  Crc;\r
+  UINT8   *Ptr;\r
+\r
+  ASSERT (Buffer != NULL);\r
+  ASSERT (Length <= (MAX_ADDRESS - ((UINTN) Buffer) + 1));\r
+\r
+  //\r
+  // Compute CRC\r
+  //\r
+  Crc = 0xffffffff;\r
+  for (Index = 0, Ptr = Buffer; Index < Length; Index++, Ptr++) {\r
+    Crc = (Crc >> 8) ^ mCrcTable[(UINT8) Crc ^ *Ptr];\r
+  }\r
+\r
+  return Crc ^ 0xffffffff;\r
+}\r