Staging: vt665x: Clean up include files, Part 2
[deliverable/linux.git] / drivers / staging / vt6655 / tcrc.c
1 /*
2 * Copyright (c) 2003 VIA Networking, Inc. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 *
19 * File: tcrc.c
20 *
21 * Purpose: Implement functions to caculate CRC
22 *
23 * Author: Tevin Chen
24 *
25 * Date: May 21, 1996
26 *
27 * Functions:
28 * CRCdwCrc32 -
29 * CRCdwGetCrc32 -
30 * CRCdwGetCrc32Ex -
31 *
32 * Revision History:
33 *
34 */
35
36 #include "tbit.h"
37 #include "tcrc.h"
38
39 /*--------------------- Static Definitions -------------------------*/
40
41 /*--------------------- Static Classes ----------------------------*/
42
43 /*--------------------- Static Variables --------------------------*/
44
45 // 32-bit CRC table
46 static const DWORD s_adwCrc32Table[256] = {
47 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
48 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
49 0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
50 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
51 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
52 0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
53 0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
54 0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
55 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
56 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
57 0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
58 0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
59 0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
60 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
61 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
62 0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
63 0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
64 0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
65 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
66 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
67 0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
68 0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
69 0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
70 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
71 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
72 0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
73 0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
74 0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
75 0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
76 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
77 0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
78 0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
79 0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
80 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
81 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
82 0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
83 0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
84 0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
85 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
86 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
87 0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
88 0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
89 0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
90 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
91 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
92 0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
93 0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
94 0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
95 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
96 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
97 0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
98 0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
99 0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
100 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
101 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
102 0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
103 0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
104 0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
105 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
106 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
107 0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
108 0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
109 0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
110 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
111 };
112
113 /*--------------------- Static Functions --------------------------*/
114
115 /*--------------------- Export Variables --------------------------*/
116
117
118
119
120 /*+
121 *
122 * Description:
123 * Generate a CRC-32 from the data stream
124 *
125 * Parameters:
126 * In:
127 * pbyData - the data stream
128 * cbByte - the length of the stream
129 * dwCrcSeed - Seed for CRC32
130 * Out:
131 * none
132 *
133 * Return Value: CRC-32
134 *
135 -*/
136 DWORD CRCdwCrc32 (PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed)
137 {
138 DWORD dwCrc;
139
140 dwCrc = dwCrcSeed;
141 while (cbByte--) {
142 dwCrc = s_adwCrc32Table[(BYTE)((dwCrc ^ (*pbyData)) & 0xFF)] ^ (dwCrc >> 8);
143 pbyData++;
144 }
145
146 return dwCrc;
147 }
148
149
150 /*+
151 *
152 * Description:
153 * To test CRC generator, input 8 bytes packet
154 * -- 0xff 0xff 0xff 0xff 0x00 0x00 0x00 0x00
155 * the generated CRC should be
156 * -- 0xff 0xff 0xff 0xff
157 *
158 * Parameters:
159 * In:
160 * pbyData - the data stream
161 * cbByte - the length of the stream
162 * Out:
163 * none
164 *
165 * Return Value: CRC-32
166 *
167 -*/
168 DWORD CRCdwGetCrc32 (PBYTE pbyData, UINT cbByte)
169 {
170 return ~CRCdwCrc32(pbyData, cbByte, 0xFFFFFFFFL);
171 }
172
173
174 /*+
175 *
176 * Description:
177 *
178 * NOTE.... Because CRCdwGetCrc32Ex() is an iteration function,
179 * this means we will use the output of CRCdwGetCrc32Ex()
180 * to be a new argument to do next CRCdwGetCrc32Ex() calculation.
181 * Thus, the final result must be inverted to be the
182 * correct answer.
183 *
184 * Parameters:
185 * In:
186 * pbyData - the data stream
187 * cbByte - the length of the stream
188 * Out:
189 * none
190 *
191 * Return Value: CRC-32
192 *
193 -*/
194 DWORD CRCdwGetCrc32Ex(PBYTE pbyData, UINT cbByte, DWORD dwPreCRC)
195 {
196 return CRCdwCrc32(pbyData, cbByte, dwPreCRC);
197 }
198
199
This page took 0.048745 seconds and 5 git commands to generate.