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