]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - lib/crc32.c
crc32: miscellaneous cleanups
[mirror_ubuntu-artful-kernel.git] / lib / crc32.c
CommitLineData
1da177e4
LT
1/*
2 * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
3 * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks!
4 * Code was from the public domain, copyright abandoned. Code was
5 * subsequently included in the kernel, thus was re-licensed under the
6 * GNU GPL v2.
7 *
8 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
9 * Same crc32 function was used in 5 other places in the kernel.
10 * I made one version, and deleted the others.
11 * There are various incantations of crc32(). Some use a seed of 0 or ~0.
12 * Some xor at the end with ~0. The generic crc32() function takes
13 * seed as an argument, and doesn't xor at the end. Then individual
14 * users can do whatever they need.
15 * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
16 * fs/jffs2 uses seed 0, doesn't xor with ~0.
17 * fs/partitions/efi.c uses seed ~0, xor's with ~0.
18 *
19 * This source code is licensed under the GNU General Public License,
20 * Version 2. See the file COPYING for more details.
21 */
22
fbedceb1
BP
23/* see: Documentation/crc32.txt for a description of algorithms */
24
1da177e4 25#include <linux/crc32.h>
1da177e4 26#include <linux/module.h>
1da177e4 27#include <linux/types.h>
1da177e4 28#include "crc32defs.h"
60e58d5c 29
1da177e4 30#if CRC_LE_BITS == 8
4f2a9463 31# define tole(x) __constant_cpu_to_le32(x)
1da177e4 32#else
4f2a9463
JT
33# define tole(x) (x)
34#endif
35
36#if CRC_BE_BITS == 8
37# define tobe(x) __constant_cpu_to_be32(x)
38#else
39# define tobe(x) (x)
1da177e4 40#endif
60e58d5c 41
1da177e4
LT
42#include "crc32table.h"
43
44MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
45MODULE_DESCRIPTION("Ethernet CRC32 calculations");
46MODULE_LICENSE("GPL");
47
ddcaccbc
JT
48#if CRC_LE_BITS == 8 || CRC_BE_BITS == 8
49
50static inline u32
836e2af9 51crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
ddcaccbc 52{
0d2daf5c 53# ifdef __LITTLE_ENDIAN
5742332d
JT
54# define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8)
55# define DO_CRC4 crc = t3[(crc) & 255] ^ \
56 t2[(crc >> 8) & 255] ^ \
57 t1[(crc >> 16) & 255] ^ \
58 t0[(crc >> 24) & 255]
ddcaccbc 59# else
5742332d
JT
60# define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
61# define DO_CRC4 crc = t0[(crc) & 255] ^ \
62 t1[(crc >> 8) & 255] ^ \
63 t2[(crc >> 16) & 255] ^ \
64 t3[(crc >> 24) & 255]
ddcaccbc 65# endif
4f2a9463 66 const u32 *b;
ddcaccbc 67 size_t rem_len;
5742332d 68 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
ddcaccbc
JT
69
70 /* Align it */
4f2a9463 71 if (unlikely((long)buf & 3 && len)) {
ddcaccbc 72 do {
4f2a9463
JT
73 DO_CRC(*buf++);
74 } while ((--len) && ((long)buf)&3);
ddcaccbc
JT
75 }
76 rem_len = len & 3;
77 /* load data 32 bits wide, xor data 32 bits wide. */
78 len = len >> 2;
4f2a9463 79 b = (const u32 *)buf;
ddcaccbc
JT
80 for (--b; len; --len) {
81 crc ^= *++b; /* use pre increment for speed */
836e2af9 82 DO_CRC4;
ddcaccbc
JT
83 }
84 len = rem_len;
85 /* And the last few bytes */
86 if (len) {
87 u8 *p = (u8 *)(b + 1) - 1;
88 do {
89 DO_CRC(*++p); /* use pre increment for speed */
90 } while (--len);
91 }
92 return crc;
4f2a9463 93#undef DO_CRC
836e2af9 94#undef DO_CRC4
ddcaccbc
JT
95}
96#endif
60e58d5c 97
2f72100c
RD
98/**
99 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
100 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
101 * other uses, or the previous crc32 value if computing incrementally.
102 * @p: pointer to buffer over which CRC is run
103 * @len: length of buffer @p
104 */
e8c44319 105u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
1da177e4 106{
60e58d5c 107#if CRC_LE_BITS == 1
1da177e4
LT
108 int i;
109 while (len--) {
110 crc ^= *p++;
111 for (i = 0; i < 8; i++)
112 crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
113 }
60e58d5c 114# elif CRC_LE_BITS == 2
1da177e4
LT
115 while (len--) {
116 crc ^= *p++;
60e58d5c
BP
117 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
118 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
119 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
120 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
1da177e4 121 }
60e58d5c 122# elif CRC_LE_BITS == 4
1da177e4
LT
123 while (len--) {
124 crc ^= *p++;
60e58d5c
BP
125 crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
126 crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
1da177e4 127 }
60e58d5c
BP
128# elif CRC_LE_BITS == 8
129 const u32 (*tab)[] = crc32table_le;
130
131 crc = __cpu_to_le32(crc);
132 crc = crc32_body(crc, p, len, tab);
133 crc = __le32_to_cpu(crc);
134#endif
1da177e4 135 return crc;
1da177e4 136}
60e58d5c 137EXPORT_SYMBOL(crc32_le);
1da177e4 138
2f72100c
RD
139/**
140 * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
141 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
142 * other uses, or the previous crc32 value if computing incrementally.
143 * @p: pointer to buffer over which CRC is run
144 * @len: length of buffer @p
145 */
e8c44319 146u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
1da177e4 147{
60e58d5c 148#if CRC_BE_BITS == 1
1da177e4
LT
149 int i;
150 while (len--) {
151 crc ^= *p++ << 24;
152 for (i = 0; i < 8; i++)
153 crc =
154 (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE :
155 0);
156 }
60e58d5c 157# elif CRC_BE_BITS == 2
1da177e4
LT
158 while (len--) {
159 crc ^= *p++ << 24;
60e58d5c
BP
160 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
161 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
162 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
163 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
1da177e4 164 }
60e58d5c 165# elif CRC_BE_BITS == 4
1da177e4
LT
166 while (len--) {
167 crc ^= *p++ << 24;
60e58d5c
BP
168 crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
169 crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
1da177e4 170 }
60e58d5c
BP
171# elif CRC_BE_BITS == 8
172 const u32 (*tab)[] = crc32table_be;
173
174 crc = __cpu_to_be32(crc);
175 crc = crc32_body(crc, p, len, tab);
176 crc = __be32_to_cpu(crc);
1da177e4 177# endif
60e58d5c 178 return crc;
1da177e4 179}
1da177e4 180EXPORT_SYMBOL(crc32_be);
1da177e4 181
3863ef31 182#ifdef CONFIG_CRC32_SELFTEST
1da177e4 183
3863ef31
BP
184/* 4096 random bytes */
185static u8 __attribute__((__aligned__(8))) test_buf[] =
1da177e4 186{
3863ef31
BP
187 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
188 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
189 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
190 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
191 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
192 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
193 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
194 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
195 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
196 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
197 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
198 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
199 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
200 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
201 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
202 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
203 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
204 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
205 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
206 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
207 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
208 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
209 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
210 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
211 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
212 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
213 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
214 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
215 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
216 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
217 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
218 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
219 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
220 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
221 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
222 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
223 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
224 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
225 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
226 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
227 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
228 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
229 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
230 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
231 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
232 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
233 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
234 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
235 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
236 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
237 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
238 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
239 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
240 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
241 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
242 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
243 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
244 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
245 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
246 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
247 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
248 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
249 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
250 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
251 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
252 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
253 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
254 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
255 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
256 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
257 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
258 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
259 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
260 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
261 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
262 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
263 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
264 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
265 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
266 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
267 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
268 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
269 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
270 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
271 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
272 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
273 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
274 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
275 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
276 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
277 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
278 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
279 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
280 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
281 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
282 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
283 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
284 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
285 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
286 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
287 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
288 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
289 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
290 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
291 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
292 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
293 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
294 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
295 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
296 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
297 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
298 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
299 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
300 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
301 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
302 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
303 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
304 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
305 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
306 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
307 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
308 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
309 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
310 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
311 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
312 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
313 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
314 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
315 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
316 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
317 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
318 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
319 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
320 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
321 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
322 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
323 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
324 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
325 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
326 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
327 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
328 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
329 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
330 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
331 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
332 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
333 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
334 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
335 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
336 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
337 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
338 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
339 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
340 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
341 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
342 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
343 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
344 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
345 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
346 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
347 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
348 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
349 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
350 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
351 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
352 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
353 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
354 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
355 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
356 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
357 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
358 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
359 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
360 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
361 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
362 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
363 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
364 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
365 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
366 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
367 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
368 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
369 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
370 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
371 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
372 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
373 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
374 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
375 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
376 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
377 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
378 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
379 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
380 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
381 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
382 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
383 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
384 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
385 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
386 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
387 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
388 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
389 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
390 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
391 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
392 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
393 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
394 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
395 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
396 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
397 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
398 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
399 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
400 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
401 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
402 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
403 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
404 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
405 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
406 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
407 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
408 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
409 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
410 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
411 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
412 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
413 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
414 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
415 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
416 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
417 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
418 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
419 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
420 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
421 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
422 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
423 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
424 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
425 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
426 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
427 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
428 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
429 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
430 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
431 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
432 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
433 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
434 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
435 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
436 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
437 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
438 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
439 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
440 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
441 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
442 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
443 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
444 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
445 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
446 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
447 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
448 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
449 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
450 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
451 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
452 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
453 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
454 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
455 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
456 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
457 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
458 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
459 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
460 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
461 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
462 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
463 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
464 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
465 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
466 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
467 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
468 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
469 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
470 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
471 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
472 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
473 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
474 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
475 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
476 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
477 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
478 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
479 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
480 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
481 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
482 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
483 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
484 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
485 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
486 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
487 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
488 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
489 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
490 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
491 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
492 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
493 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
494 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
495 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
496 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
497 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
498 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
499 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
500 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
501 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
502 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
503 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
504 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
505 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
506 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
507 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
508 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
509 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
510 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
511 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
512 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
513 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
514 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
515 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
516 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
517 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
518 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
519 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
520 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
521 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
522 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
523 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
524 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
525 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
526 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
527 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
528 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
529 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
530 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
531 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
532 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
533 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
534 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
535 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
536 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
537 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
538 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
539 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
540 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
541 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
542 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
543 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
544 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
545 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
546 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
547 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
548 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
549 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
550 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
551 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
552 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
553 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
554 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
555 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
556 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
557 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
558 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
559 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
560 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
561 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
562 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
563 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
564 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
565 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
566 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
567 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
568 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
569 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
570 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
571 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
572 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
573 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
574 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
575 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
576 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
577 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
578 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
579 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
580 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
581 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
582 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
583 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
584 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
585 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
586 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
587 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
588 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
589 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
590 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
591 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
592 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
593 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
594 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
595 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
596 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
597 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
598 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
599 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
600 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
601 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
602 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
603 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
604 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
605 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
606 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
607 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
608 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
609 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
610 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
611 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
612 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
613 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
614 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
615 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
616 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
617 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
618 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
619 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
620 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
621 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
622 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
623 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
624 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
625 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
626 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
627 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
628 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
629 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
630 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
631 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
632 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
633 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
634 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
635 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
636 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
637 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
638 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
639 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
640 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
641 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
642 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
643 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
644 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
645 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
646 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
647 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
648 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
649 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
650 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
651 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
652 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
653 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
654 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
655 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
656 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
657 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
658 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
659 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
660 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
661 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
662 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
663 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
664 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
665 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
666 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
667 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
668 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
669 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
670 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
671 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
672 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
673 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
674 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
675 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
676 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
677 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
678 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
679 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
680 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
681 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
682 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
683 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
684 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
685 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
686 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
687 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
688 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
689 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
690 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
691 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
692 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
693 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
694 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
695 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
696 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
697 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
698 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
699};
700
701/* 100 test cases */
702static struct crc_test {
703 u32 crc; /* random starting crc */
704 u32 start; /* random 6 bit offset in buf */
705 u32 length; /* random 11 bit length of test */
706 u32 crc_le; /* expected crc32_le result */
707 u32 crc_be; /* expected crc32_be result */
708} test[] =
1da177e4 709{
3863ef31
BP
710 {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1},
711 {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad},
712 {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f},
713 {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a},
714 {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2},
715 {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793},
716 {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed},
717 {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35},
718 {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2},
719 {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10},
720 {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb},
721 {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0},
722 {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb},
723 {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed},
724 {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591},
725 {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67},
726 {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd},
727 {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a},
728 {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b},
729 {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f},
730 {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d},
731 {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a},
732 {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97},
733 {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2},
734 {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138},
735 {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032},
736 {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f},
737 {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f},
738 {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32},
739 {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef},
740 {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0},
741 {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59},
742 {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4},
743 {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c},
744 {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51},
745 {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11},
746 {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659},
747 {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af},
748 {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99},
749 {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b},
750 {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521},
751 {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3},
752 {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d},
753 {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f},
754 {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b},
755 {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0},
756 {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195},
757 {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d},
758 {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4},
759 {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3},
760 {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643},
761 {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10},
762 {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d},
763 {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5},
764 {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b},
765 {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee},
766 {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14},
767 {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a},
768 {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b},
769 {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3},
770 {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826},
771 {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06},
772 {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35},
773 {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801},
774 {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2},
775 {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d},
776 {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c},
777 {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba},
778 {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5},
779 {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b},
780 {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178},
781 {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3},
782 {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605},
783 {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1},
784 {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9},
785 {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78},
786 {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9},
787 {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd},
788 {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab},
789 {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb},
790 {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77},
791 {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da},
792 {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39},
793 {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16},
794 {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208},
795 {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e},
796 {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5},
797 {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892},
798 {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db},
799 {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43},
800 {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac},
801 {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7},
802 {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2},
803 {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2},
804 {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640},
805 {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f},
806 {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99},
807 {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7},
808 {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499},
809 {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a},
810};
811
812#include <linux/time.h>
813
814static int __init crc32_init(void)
1da177e4 815{
3863ef31
BP
816 int i;
817 int errors = 0;
818 int bytes = 0;
819 struct timespec start, stop;
820 u64 nsec;
821 unsigned long flags;
1da177e4 822
3863ef31
BP
823 /* keep static to prevent cache warming code from
824 * getting eliminated by the compiler */
825 static u32 crc;
1da177e4 826
3863ef31
BP
827 /* pre-warm the cache */
828 for (i = 0; i < 100; i++) {
829 bytes += 2*test[i].length;
1da177e4 830
3863ef31
BP
831 crc ^= crc32_le(test[i].crc, test_buf +
832 test[i].start, test[i].length);
833
834 crc ^= crc32_be(test[i].crc, test_buf +
835 test[i].start, test[i].length);
1da177e4
LT
836 }
837
3863ef31
BP
838 /* reduce OS noise */
839 local_irq_save(flags);
840 local_irq_disable();
841
842 getnstimeofday(&start);
843 for (i = 0; i < 100; i++) {
844 if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
845 test[i].start, test[i].length))
846 errors++;
847
848 if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
849 test[i].start, test[i].length))
850 errors++;
1da177e4 851 }
3863ef31 852 getnstimeofday(&stop);
1da177e4 853
3863ef31
BP
854 local_irq_restore(flags);
855 local_irq_enable();
1da177e4 856
3863ef31
BP
857 nsec = stop.tv_nsec - start.tv_nsec +
858 1000000000 * (stop.tv_sec - start.tv_sec);
1da177e4 859
3863ef31
BP
860 pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
861 CRC_LE_BITS, CRC_BE_BITS);
862
863 if (errors)
864 pr_warn("crc32: %d self tests failed\n", errors);
865 else {
866 pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
867 bytes, nsec);
1da177e4 868 }
3863ef31 869
1da177e4
LT
870 return 0;
871}
872
3863ef31
BP
873static void __exit crc32_exit(void)
874{
875}
876
877module_init(crc32_init);
878module_exit(crc32_exit);
879#endif /* CONFIG_CRC32_SELFTEST */