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