• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/firmware-utils/src/cyg_crc32.c

  1 //==========================================================================
  2 //
  3 //      crc32.c
  4 //
  5 //      Gary S. Brown's 32 bit CRC
  6 //
  7 //==========================================================================
  8 //####ECOSGPLCOPYRIGHTBEGIN####
  9 // -------------------------------------------
 10 // This file is part of eCos, the Embedded Configurable Operating System.
 11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
 12 // Copyright (C) 2002 Gary Thomas
 13 //
 14 // eCos is free software; you can redistribute it and/or modify it under
 15 // the terms of the GNU General Public License as published by the Free
 16 // Software Foundation; either version 2 or (at your option) any later version.
 17 //
 18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
 19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
 20 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 21 // for more details.
 22 //
 23 // You should have received a copy of the GNU General Public License along
 24 // with eCos; if not, write to the Free Software Foundation, Inc.,
 25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 26 //
 27 // As a special exception, if other files instantiate templates or use macros
 28 // or inline functions from this file, or you compile this file and link it
 29 // with other works to produce a work based on this file, this file does not
 30 // by itself cause the resulting work to be covered by the GNU General Public
 31 // License. However the source code for this file must still be made available
 32 // in accordance with section (3) of the GNU General Public License.
 33 //
 34 // This exception does not invalidate any other reasons why a work based on
 35 // this file might be covered by the GNU General Public License.
 36 //
 37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
 38 // at http://sources.redhat.com/ecos/ecos-license/
 39 // -------------------------------------------
 40 //####ECOSGPLCOPYRIGHTEND####
 41 //==========================================================================
 42 //#####DESCRIPTIONBEGIN####
 43 //
 44 // Author(s):    gthomas
 45 // Contributors: gthomas,asl
 46 // Date:         2001-01-31
 47 // Purpose:      
 48 // Description:  
 49 //              
 50 // This code is part of eCos (tm).
 51 //
 52 //####DESCRIPTIONEND####
 53 //
 54 //==========================================================================
 55 
 56 #if 0
 57 #include <cyg/crc/crc.h>
 58 #else
 59 #include "cyg_crc.h"
 60 #endif
 61 
 62   /* ====================================================================== */
 63   /*  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or       */
 64   /*  code or tables extracted from it, as desired without restriction.     */
 65   /*                                                                        */
 66   /*  First, the polynomial itself and its table of feedback terms.  The    */
 67   /*  polynomial is                                                         */
 68   /*  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0   */
 69   /*                                                                        */
 70   /* ====================================================================== */
 71 
 72 static const cyg_uint32 crc32_tab[] = {
 73       0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
 74       0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
 75       0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
 76       0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
 77       0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
 78       0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
 79       0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
 80       0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
 81       0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
 82       0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
 83       0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
 84       0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
 85       0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
 86       0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
 87       0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
 88       0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
 89       0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
 90       0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
 91       0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
 92       0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
 93       0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
 94       0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
 95       0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
 96       0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
 97       0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
 98       0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
 99       0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
100       0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
101       0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
102       0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
103       0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
104       0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
105       0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
106       0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
107       0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
108       0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
109       0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
110       0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
111       0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
112       0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
113       0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
114       0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
115       0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
116       0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
117       0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
118       0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
119       0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
120       0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
121       0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
122       0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
123       0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
124       0x2d02ef8dL
125    };
126 
127 /* This is the standard Gary S. Brown's 32 bit CRC algorithm, but
128    accumulate the CRC into the result of a previous CRC. */
129 cyg_uint32 
130 cyg_crc32_accumulate(cyg_uint32 crc32val, void *ptr, int len)
131 {
132   unsigned char *s = ptr;
133   int i;
134 
135   for (i = 0;  i < len;  i++) {
136     crc32val = crc32_tab[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8);
137   }
138   return crc32val;
139 }
140 
141 /* This is the standard Gary S. Brown's 32 bit CRC algorithm */
142 cyg_uint32
143 cyg_crc32(void *s, int len)
144 {
145   return (cyg_crc32_accumulate(0,s,len));
146 }
147 
148 /* Return a 32-bit CRC of the contents of the buffer accumulating the
149    result from a previous CRC calculation. This uses the Ethernet FCS
150    algorithm.*/
151 cyg_uint32
152 cyg_ether_crc32_accumulate(cyg_uint32 crc32val, void *ptr, int len)
153 {
154   unsigned char *s = ptr;
155   int i;
156 
157   if (s == 0) return 0L;
158   
159   crc32val = crc32val ^ 0xffffffff;
160   for (i = 0;  i < len;  i++) {
161       crc32val = crc32_tab[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8);
162   }
163   return crc32val ^ 0xffffffff;
164 }
165 
166 /* Return a 32-bit CRC of the contents of the buffer, using the
167    Ethernet FCS algorithm. */
168 cyg_uint32
169 cyg_ether_crc32(void *s, int len)
170 {
171   return cyg_ether_crc32_accumulate(0,s,len);
172 }
173 
174 
175 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt