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