Home | History | Annotate | Download | only in Common
      1 /*++
      2 
      3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   crc32.c
     15 
     16 Abstract:
     17 
     18   CalcuateCrc32 routine.
     19 
     20 --*/
     21 
     22 #include <stdlib.h>
     23 #include "TianoCommon.h"
     24 #include "crc32.h"
     25 
     26 UINT32  mCrcTable[256] = {
     27   0x00000000,
     28   0x77073096,
     29   0xEE0E612C,
     30   0x990951BA,
     31   0x076DC419,
     32   0x706AF48F,
     33   0xE963A535,
     34   0x9E6495A3,
     35   0x0EDB8832,
     36   0x79DCB8A4,
     37   0xE0D5E91E,
     38   0x97D2D988,
     39   0x09B64C2B,
     40   0x7EB17CBD,
     41   0xE7B82D07,
     42   0x90BF1D91,
     43   0x1DB71064,
     44   0x6AB020F2,
     45   0xF3B97148,
     46   0x84BE41DE,
     47   0x1ADAD47D,
     48   0x6DDDE4EB,
     49   0xF4D4B551,
     50   0x83D385C7,
     51   0x136C9856,
     52   0x646BA8C0,
     53   0xFD62F97A,
     54   0x8A65C9EC,
     55   0x14015C4F,
     56   0x63066CD9,
     57   0xFA0F3D63,
     58   0x8D080DF5,
     59   0x3B6E20C8,
     60   0x4C69105E,
     61   0xD56041E4,
     62   0xA2677172,
     63   0x3C03E4D1,
     64   0x4B04D447,
     65   0xD20D85FD,
     66   0xA50AB56B,
     67   0x35B5A8FA,
     68   0x42B2986C,
     69   0xDBBBC9D6,
     70   0xACBCF940,
     71   0x32D86CE3,
     72   0x45DF5C75,
     73   0xDCD60DCF,
     74   0xABD13D59,
     75   0x26D930AC,
     76   0x51DE003A,
     77   0xC8D75180,
     78   0xBFD06116,
     79   0x21B4F4B5,
     80   0x56B3C423,
     81   0xCFBA9599,
     82   0xB8BDA50F,
     83   0x2802B89E,
     84   0x5F058808,
     85   0xC60CD9B2,
     86   0xB10BE924,
     87   0x2F6F7C87,
     88   0x58684C11,
     89   0xC1611DAB,
     90   0xB6662D3D,
     91   0x76DC4190,
     92   0x01DB7106,
     93   0x98D220BC,
     94   0xEFD5102A,
     95   0x71B18589,
     96   0x06B6B51F,
     97   0x9FBFE4A5,
     98   0xE8B8D433,
     99   0x7807C9A2,
    100   0x0F00F934,
    101   0x9609A88E,
    102   0xE10E9818,
    103   0x7F6A0DBB,
    104   0x086D3D2D,
    105   0x91646C97,
    106   0xE6635C01,
    107   0x6B6B51F4,
    108   0x1C6C6162,
    109   0x856530D8,
    110   0xF262004E,
    111   0x6C0695ED,
    112   0x1B01A57B,
    113   0x8208F4C1,
    114   0xF50FC457,
    115   0x65B0D9C6,
    116   0x12B7E950,
    117   0x8BBEB8EA,
    118   0xFCB9887C,
    119   0x62DD1DDF,
    120   0x15DA2D49,
    121   0x8CD37CF3,
    122   0xFBD44C65,
    123   0x4DB26158,
    124   0x3AB551CE,
    125   0xA3BC0074,
    126   0xD4BB30E2,
    127   0x4ADFA541,
    128   0x3DD895D7,
    129   0xA4D1C46D,
    130   0xD3D6F4FB,
    131   0x4369E96A,
    132   0x346ED9FC,
    133   0xAD678846,
    134   0xDA60B8D0,
    135   0x44042D73,
    136   0x33031DE5,
    137   0xAA0A4C5F,
    138   0xDD0D7CC9,
    139   0x5005713C,
    140   0x270241AA,
    141   0xBE0B1010,
    142   0xC90C2086,
    143   0x5768B525,
    144   0x206F85B3,
    145   0xB966D409,
    146   0xCE61E49F,
    147   0x5EDEF90E,
    148   0x29D9C998,
    149   0xB0D09822,
    150   0xC7D7A8B4,
    151   0x59B33D17,
    152   0x2EB40D81,
    153   0xB7BD5C3B,
    154   0xC0BA6CAD,
    155   0xEDB88320,
    156   0x9ABFB3B6,
    157   0x03B6E20C,
    158   0x74B1D29A,
    159   0xEAD54739,
    160   0x9DD277AF,
    161   0x04DB2615,
    162   0x73DC1683,
    163   0xE3630B12,
    164   0x94643B84,
    165   0x0D6D6A3E,
    166   0x7A6A5AA8,
    167   0xE40ECF0B,
    168   0x9309FF9D,
    169   0x0A00AE27,
    170   0x7D079EB1,
    171   0xF00F9344,
    172   0x8708A3D2,
    173   0x1E01F268,
    174   0x6906C2FE,
    175   0xF762575D,
    176   0x806567CB,
    177   0x196C3671,
    178   0x6E6B06E7,
    179   0xFED41B76,
    180   0x89D32BE0,
    181   0x10DA7A5A,
    182   0x67DD4ACC,
    183   0xF9B9DF6F,
    184   0x8EBEEFF9,
    185   0x17B7BE43,
    186   0x60B08ED5,
    187   0xD6D6A3E8,
    188   0xA1D1937E,
    189   0x38D8C2C4,
    190   0x4FDFF252,
    191   0xD1BB67F1,
    192   0xA6BC5767,
    193   0x3FB506DD,
    194   0x48B2364B,
    195   0xD80D2BDA,
    196   0xAF0A1B4C,
    197   0x36034AF6,
    198   0x41047A60,
    199   0xDF60EFC3,
    200   0xA867DF55,
    201   0x316E8EEF,
    202   0x4669BE79,
    203   0xCB61B38C,
    204   0xBC66831A,
    205   0x256FD2A0,
    206   0x5268E236,
    207   0xCC0C7795,
    208   0xBB0B4703,
    209   0x220216B9,
    210   0x5505262F,
    211   0xC5BA3BBE,
    212   0xB2BD0B28,
    213   0x2BB45A92,
    214   0x5CB36A04,
    215   0xC2D7FFA7,
    216   0xB5D0CF31,
    217   0x2CD99E8B,
    218   0x5BDEAE1D,
    219   0x9B64C2B0,
    220   0xEC63F226,
    221   0x756AA39C,
    222   0x026D930A,
    223   0x9C0906A9,
    224   0xEB0E363F,
    225   0x72076785,
    226   0x05005713,
    227   0x95BF4A82,
    228   0xE2B87A14,
    229   0x7BB12BAE,
    230   0x0CB61B38,
    231   0x92D28E9B,
    232   0xE5D5BE0D,
    233   0x7CDCEFB7,
    234   0x0BDBDF21,
    235   0x86D3D2D4,
    236   0xF1D4E242,
    237   0x68DDB3F8,
    238   0x1FDA836E,
    239   0x81BE16CD,
    240   0xF6B9265B,
    241   0x6FB077E1,
    242   0x18B74777,
    243   0x88085AE6,
    244   0xFF0F6A70,
    245   0x66063BCA,
    246   0x11010B5C,
    247   0x8F659EFF,
    248   0xF862AE69,
    249   0x616BFFD3,
    250   0x166CCF45,
    251   0xA00AE278,
    252   0xD70DD2EE,
    253   0x4E048354,
    254   0x3903B3C2,
    255   0xA7672661,
    256   0xD06016F7,
    257   0x4969474D,
    258   0x3E6E77DB,
    259   0xAED16A4A,
    260   0xD9D65ADC,
    261   0x40DF0B66,
    262   0x37D83BF0,
    263   0xA9BCAE53,
    264   0xDEBB9EC5,
    265   0x47B2CF7F,
    266   0x30B5FFE9,
    267   0xBDBDF21C,
    268   0xCABAC28A,
    269   0x53B39330,
    270   0x24B4A3A6,
    271   0xBAD03605,
    272   0xCDD70693,
    273   0x54DE5729,
    274   0x23D967BF,
    275   0xB3667A2E,
    276   0xC4614AB8,
    277   0x5D681B02,
    278   0x2A6F2B94,
    279   0xB40BBE37,
    280   0xC30C8EA1,
    281   0x5A05DF1B,
    282   0x2D02EF8D
    283 };
    284 
    285 EFI_STATUS
    286 CalculateCrc32 (
    287   IN  UINT8                             *Data,
    288   IN  UINTN                             DataSize,
    289   IN OUT UINT32                         *CrcOut
    290   )
    291 /*++
    292 
    293 Routine Description:
    294 
    295   The CalculateCrc32 routine.
    296 
    297 Arguments:
    298 
    299   Data        - The buffer contaning the data to be processed
    300   DataSize    - The size of data to be processed
    301   CrcOut      - A pointer to the caller allocated UINT32 that on
    302                 contains the CRC32 checksum of Data
    303 
    304 Returns:
    305 
    306   EFI_SUCCESS               - Calculation is successful.
    307   EFI_INVALID_PARAMETER     - Data / CrcOut = NULL, or DataSize = 0
    308 
    309 --*/
    310 {
    311   UINT32  Crc;
    312   UINTN   Index;
    313   UINT8   *Ptr;
    314 
    315   if ((DataSize == 0) || (Data == NULL) || (CrcOut == NULL)) {
    316     return EFI_INVALID_PARAMETER;
    317   }
    318 
    319   Crc = 0xffffffff;
    320   for (Index = 0, Ptr = Data; Index < DataSize; Index++, Ptr++) {
    321     Crc = (Crc >> 8) ^ mCrcTable[(UINT8) Crc ^ *Ptr];
    322   }
    323 
    324   *CrcOut = Crc ^ 0xffffffff;
    325 
    326   return EFI_SUCCESS;
    327 }
    328