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