about summary refs log tree commit diff stats
path: root/crc32.c
diff options
context:
space:
mode:
authorjncronin <jncronin@21779fe5-bacf-4c11-b3ef-82bd0e1f58e8>2014-07-14 21:05:41 +0000
committerjncronin <jncronin@21779fe5-bacf-4c11-b3ef-82bd0e1f58e8>2014-07-14 21:05:41 +0000
commita7c0c3ce10b4a6a9a481ea486da625eac6ae3d58 (patch)
treede8bca74f74ffd62d970fbf2b2675d4b529b01a2 /crc32.c
downloadmkgpt-a7c0c3ce10b4a6a9a481ea486da625eac6ae3d58.tar.gz
git-svn-id: https://www.tysos.org/svn/branches/tysila3/tload/mkgpt@549 21779fe5-bacf-4c11-b3ef-82bd0e1f58e8
Diffstat (limited to 'crc32.c')
-rw-r--r--crc32.c328
1 files changed, 328 insertions, 0 deletions
diff --git a/crc32.c b/crc32.c
new file mode 100644
index 0000000..4d9eb02
--- /dev/null
+++ b/crc32.c
@@ -0,0 +1,328 @@
+/*++

+

+Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>

+This program and the accompanying materials                          

+are licensed and made available under the terms and conditions of the BSD License         

+which accompanies this distribution.  The full text of the license may be found at        

+http://opensource.org/licenses/bsd-license.php                                            

+                                                                                          

+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     

+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             

+

+Module Name:

+

+  crc32.c

+

+Abstract:

+

+  CalcuateCrc32 routine.

+

+  Modified to avoid EFI dependencies for mkgpt

+  

+--*/

+

+#include <stdlib.h>

+#include <stdint.h>

+

+uint32_t  mCrcTable[256] = {

+  0x00000000,

+  0x77073096,

+  0xEE0E612C,

+  0x990951BA,

+  0x076DC419,

+  0x706AF48F,

+  0xE963A535,

+  0x9E6495A3,

+  0x0EDB8832,

+  0x79DCB8A4,

+  0xE0D5E91E,

+  0x97D2D988,

+  0x09B64C2B,

+  0x7EB17CBD,

+  0xE7B82D07,

+  0x90BF1D91,

+  0x1DB71064,

+  0x6AB020F2,

+  0xF3B97148,

+  0x84BE41DE,

+  0x1ADAD47D,

+  0x6DDDE4EB,

+  0xF4D4B551,

+  0x83D385C7,

+  0x136C9856,

+  0x646BA8C0,

+  0xFD62F97A,

+  0x8A65C9EC,

+  0x14015C4F,

+  0x63066CD9,

+  0xFA0F3D63,

+  0x8D080DF5,

+  0x3B6E20C8,

+  0x4C69105E,

+  0xD56041E4,

+  0xA2677172,

+  0x3C03E4D1,

+  0x4B04D447,

+  0xD20D85FD,

+  0xA50AB56B,

+  0x35B5A8FA,

+  0x42B2986C,

+  0xDBBBC9D6,

+  0xACBCF940,

+  0x32D86CE3,

+  0x45DF5C75,

+  0xDCD60DCF,

+  0xABD13D59,

+  0x26D930AC,

+  0x51DE003A,

+  0xC8D75180,

+  0xBFD06116,

+  0x21B4F4B5,

+  0x56B3C423,

+  0xCFBA9599,

+  0xB8BDA50F,

+  0x2802B89E,

+  0x5F058808,

+  0xC60CD9B2,

+  0xB10BE924,

+  0x2F6F7C87,

+  0x58684C11,

+  0xC1611DAB,

+  0xB6662D3D,

+  0x76DC4190,

+  0x01DB7106,

+  0x98D220BC,

+  0xEFD5102A,

+  0x71B18589,

+  0x06B6B51F,

+  0x9FBFE4A5,

+  0xE8B8D433,

+  0x7807C9A2,

+  0x0F00F934,

+  0x9609A88E,

+  0xE10E9818,

+  0x7F6A0DBB,

+  0x086D3D2D,

+  0x91646C97,

+  0xE6635C01,

+  0x6B6B51F4,

+  0x1C6C6162,

+  0x856530D8,

+  0xF262004E,

+  0x6C0695ED,

+  0x1B01A57B,

+  0x8208F4C1,

+  0xF50FC457,

+  0x65B0D9C6,

+  0x12B7E950,

+  0x8BBEB8EA,

+  0xFCB9887C,

+  0x62DD1DDF,

+  0x15DA2D49,

+  0x8CD37CF3,

+  0xFBD44C65,

+  0x4DB26158,

+  0x3AB551CE,

+  0xA3BC0074,

+  0xD4BB30E2,

+  0x4ADFA541,

+  0x3DD895D7,

+  0xA4D1C46D,

+  0xD3D6F4FB,

+  0x4369E96A,

+  0x346ED9FC,

+  0xAD678846,

+  0xDA60B8D0,

+  0x44042D73,

+  0x33031DE5,

+  0xAA0A4C5F,

+  0xDD0D7CC9,

+  0x5005713C,

+  0x270241AA,

+  0xBE0B1010,

+  0xC90C2086,

+  0x5768B525,

+  0x206F85B3,

+  0xB966D409,

+  0xCE61E49F,

+  0x5EDEF90E,

+  0x29D9C998,

+  0xB0D09822,

+  0xC7D7A8B4,

+  0x59B33D17,

+  0x2EB40D81,

+  0xB7BD5C3B,

+  0xC0BA6CAD,

+  0xEDB88320,

+  0x9ABFB3B6,

+  0x03B6E20C,

+  0x74B1D29A,

+  0xEAD54739,

+  0x9DD277AF,

+  0x04DB2615,

+  0x73DC1683,

+  0xE3630B12,

+  0x94643B84,

+  0x0D6D6A3E,

+  0x7A6A5AA8,

+  0xE40ECF0B,

+  0x9309FF9D,

+  0x0A00AE27,

+  0x7D079EB1,

+  0xF00F9344,

+  0x8708A3D2,

+  0x1E01F268,

+  0x6906C2FE,

+  0xF762575D,

+  0x806567CB,

+  0x196C3671,

+  0x6E6B06E7,

+  0xFED41B76,

+  0x89D32BE0,

+  0x10DA7A5A,

+  0x67DD4ACC,

+  0xF9B9DF6F,

+  0x8EBEEFF9,

+  0x17B7BE43,

+  0x60B08ED5,

+  0xD6D6A3E8,

+  0xA1D1937E,

+  0x38D8C2C4,

+  0x4FDFF252,

+  0xD1BB67F1,

+  0xA6BC5767,

+  0x3FB506DD,

+  0x48B2364B,

+  0xD80D2BDA,

+  0xAF0A1B4C,

+  0x36034AF6,

+  0x41047A60,

+  0xDF60EFC3,

+  0xA867DF55,

+  0x316E8EEF,

+  0x4669BE79,

+  0xCB61B38C,

+  0xBC66831A,

+  0x256FD2A0,

+  0x5268E236,

+  0xCC0C7795,

+  0xBB0B4703,

+  0x220216B9,

+  0x5505262F,

+  0xC5BA3BBE,

+  0xB2BD0B28,

+  0x2BB45A92,

+  0x5CB36A04,

+  0xC2D7FFA7,

+  0xB5D0CF31,

+  0x2CD99E8B,

+  0x5BDEAE1D,

+  0x9B64C2B0,

+  0xEC63F226,

+  0x756AA39C,

+  0x026D930A,

+  0x9C0906A9,

+  0xEB0E363F,

+  0x72076785,

+  0x05005713,

+  0x95BF4A82,

+  0xE2B87A14,

+  0x7BB12BAE,

+  0x0CB61B38,

+  0x92D28E9B,

+  0xE5D5BE0D,

+  0x7CDCEFB7,

+  0x0BDBDF21,

+  0x86D3D2D4,

+  0xF1D4E242,

+  0x68DDB3F8,

+  0x1FDA836E,

+  0x81BE16CD,

+  0xF6B9265B,

+  0x6FB077E1,

+  0x18B74777,

+  0x88085AE6,

+  0xFF0F6A70,

+  0x66063BCA,

+  0x11010B5C,

+  0x8F659EFF,

+  0xF862AE69,

+  0x616BFFD3,

+  0x166CCF45,

+  0xA00AE278,

+  0xD70DD2EE,

+  0x4E048354,

+  0x3903B3C2,

+  0xA7672661,

+  0xD06016F7,

+  0x4969474D,

+  0x3E6E77DB,

+  0xAED16A4A,

+  0xD9D65ADC,

+  0x40DF0B66,

+  0x37D83BF0,

+  0xA9BCAE53,

+  0xDEBB9EC5,

+  0x47B2CF7F,

+  0x30B5FFE9,

+  0xBDBDF21C,

+  0xCABAC28A,

+  0x53B39330,

+  0x24B4A3A6,

+  0xBAD03605,

+  0xCDD70693,

+  0x54DE5729,

+  0x23D967BF,

+  0xB3667A2E,

+  0xC4614AB8,

+  0x5D681B02,

+  0x2A6F2B94,

+  0xB40BBE37,

+  0xC30C8EA1,

+  0x5A05DF1B,

+  0x2D02EF8D

+};

+

+int

+CalculateCrc32 (

+  uint8_t                           *Data,

+  size_t                            DataSize,

+  uint32_t							*CrcOut

+  )

+/*++

+

+Routine Description:

+

+  The CalculateCrc32 routine.

+

+Arguments:

+

+  Data        - The buffer contaning the data to be processed

+  DataSize    - The size of data to be processed

+  CrcOut      - A pointer to the caller allocated UINT32 that on

+                contains the CRC32 checksum of Data

+

+Returns:

+

+  EFI_SUCCESS               - Calculation is successful.

+  EFI_INVALID_PARAMETER     - Data / CrcOut = NULL, or DataSize = 0

+

+--*/

+{

+  uint32_t  Crc;

+  size_t   Index;

+  uint8_t   *Ptr;

+

+  if ((DataSize == 0) || (Data == NULL) || (CrcOut == NULL)) {

+    return -1;

+  }

+

+  Crc = 0xffffffff;

+  for (Index = 0, Ptr = Data; Index < DataSize; Index++, Ptr++) {

+    Crc = (Crc >> 8) ^ mCrcTable[(uint8_t) Crc ^ *Ptr];

+  }

+

+  *CrcOut = Crc ^ 0xffffffff;

+

+  return 0;

+}