xref: /freebsd/sys/libkern/gsb_crc32.c (revision fdafd315)
1f89d2072SXin LI /*-
2f89d2072SXin LI  *  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
3f89d2072SXin LI  *  code or tables extracted from it, as desired without restriction.
4f89d2072SXin LI  */
5f89d2072SXin LI 
6f89d2072SXin LI /*
7f89d2072SXin LI  *  First, the polynomial itself and its table of feedback terms.  The
8f89d2072SXin LI  *  polynomial is
9f89d2072SXin LI  *  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
10f89d2072SXin LI  *
11f89d2072SXin LI  *  Note that we take it "backwards" and put the highest-order term in
12f89d2072SXin LI  *  the lowest-order bit.  The X^32 term is "implied"; the LSB is the
13f89d2072SXin LI  *  X^31 term, etc.  The X^0 term (usually shown as "+1") results in
14f89d2072SXin LI  *  the MSB being 1
15f89d2072SXin LI  *
16f89d2072SXin LI  *  Note that the usual hardware shift register implementation, which
17f89d2072SXin LI  *  is what we're using (we're merely optimizing it by doing eight-bit
18f89d2072SXin LI  *  chunks at a time) shifts bits into the lowest-order term.  In our
19f89d2072SXin LI  *  implementation, that means shifting towards the right.  Why do we
20f89d2072SXin LI  *  do it this way?  Because the calculated CRC must be transmitted in
21f89d2072SXin LI  *  order from highest-order term to lowest-order term.  UARTs transmit
22f89d2072SXin LI  *  characters in order from LSB to MSB.  By storing the CRC this way
23f89d2072SXin LI  *  we hand it to the UART in the order low-byte to high-byte; the UART
24f89d2072SXin LI  *  sends each low-bit to hight-bit; and the result is transmission bit
25f89d2072SXin LI  *  by bit from highest- to lowest-order term without requiring any bit
26f89d2072SXin LI  *  shuffling on our part.  Reception works similarly
27f89d2072SXin LI  *
28f89d2072SXin LI  *  The feedback terms table consists of 256, 32-bit entries.  Notes
29f89d2072SXin LI  *
30f89d2072SXin LI  *      The table can be generated at runtime if desired; code to do so
31f89d2072SXin LI  *      is shown later.  It might not be obvious, but the feedback
32f89d2072SXin LI  *      terms simply represent the results of eight shift/xor opera
33f89d2072SXin LI  *      tions for all combinations of data and CRC register values
34f89d2072SXin LI  *
35f89d2072SXin LI  *      The values must be right-shifted by eight bits by the "updcrc
36f89d2072SXin LI  *      logic; the shift must be unsigned (bring in zeroes).  On some
37f89d2072SXin LI  *      hardware you could probably optimize the shift in assembler by
38f89d2072SXin LI  *      using byte-swap instructions
39f89d2072SXin LI  *      polynomial $edb88320
40f89d2072SXin LI  *
41f89d2072SXin LI  *
42f89d2072SXin LI  * CRC32 code derived from work by Gary S. Brown.
43f89d2072SXin LI  */
44f89d2072SXin LI 
45f89d2072SXin LI #include <sys/param.h>
4683c20b8aSAlex Richardson #include <sys/gsb_crc32.h>
47f89d2072SXin LI 
48f89d2072SXin LI #ifdef _KERNEL
49f89d2072SXin LI #include <sys/libkern.h>
50f89d2072SXin LI #include <sys/systm.h>
51f89d2072SXin LI 
52f89d2072SXin LI #if defined(__amd64__) || defined(__i386__)
53f89d2072SXin LI #include <machine/md_var.h>
54f89d2072SXin LI #include <machine/specialreg.h>
55a93941b4SAndrew Turner #include <x86/ifunc.h>
56f89d2072SXin LI #endif
57f89d2072SXin LI 
58f89d2072SXin LI #if defined(__aarch64__)
59a93941b4SAndrew Turner #include <machine/armreg.h>
60a93941b4SAndrew Turner #include <machine/ifunc.h>
61f89d2072SXin LI #endif
62f89d2072SXin LI #endif /* _KERNEL */
63f89d2072SXin LI 
6456e9a013SJohn Baldwin #ifndef _KERNEL
6556e9a013SJohn Baldwin static
6656e9a013SJohn Baldwin #endif
67f89d2072SXin LI const uint32_t crc32_tab[] = {
68f89d2072SXin LI 	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
69f89d2072SXin LI 	0xe963a535, 0x9e6495a3,	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
70f89d2072SXin LI 	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
71f89d2072SXin LI 	0xf3b97148, 0x84be41de,	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
72f89d2072SXin LI 	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,	0x14015c4f, 0x63066cd9,
73f89d2072SXin LI 	0xfa0f3d63, 0x8d080df5,	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
74f89d2072SXin LI 	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,	0x35b5a8fa, 0x42b2986c,
75f89d2072SXin LI 	0xdbbbc9d6, 0xacbcf940,	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
76f89d2072SXin LI 	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
77f89d2072SXin LI 	0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
78f89d2072SXin LI 	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,	0x76dc4190, 0x01db7106,
79f89d2072SXin LI 	0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
80f89d2072SXin LI 	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
81f89d2072SXin LI 	0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
82f89d2072SXin LI 	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
83f89d2072SXin LI 	0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
84f89d2072SXin LI 	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
85f89d2072SXin LI 	0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
86f89d2072SXin LI 	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
87f89d2072SXin LI 	0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
88f89d2072SXin LI 	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
89f89d2072SXin LI 	0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
90f89d2072SXin LI 	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
91f89d2072SXin LI 	0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
92f89d2072SXin LI 	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
93f89d2072SXin LI 	0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
94f89d2072SXin LI 	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
95f89d2072SXin LI 	0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
96f89d2072SXin LI 	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
97f89d2072SXin LI 	0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
98f89d2072SXin LI 	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
99f89d2072SXin LI 	0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
100f89d2072SXin LI 	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
101f89d2072SXin LI 	0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
102f89d2072SXin LI 	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
103f89d2072SXin LI 	0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
104f89d2072SXin LI 	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
105f89d2072SXin LI 	0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
106f89d2072SXin LI 	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
107f89d2072SXin LI 	0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
108f89d2072SXin LI 	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
109f89d2072SXin LI 	0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
110f89d2072SXin LI 	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
111f89d2072SXin LI };
112f89d2072SXin LI 
113f89d2072SXin LI /*
114f89d2072SXin LI  * A function that calculates the CRC-32 based on the table above is
115f89d2072SXin LI  * given below for documentation purposes. An equivalent implementation
116f89d2072SXin LI  * of this function that's actually used in the kernel can be found
117f89d2072SXin LI  * in sys/libkern.h, where it can be inlined.
118f89d2072SXin LI  *
119f89d2072SXin LI  *	uint32_t
120f89d2072SXin LI  *	crc32(const void *buf, size_t size)
121f89d2072SXin LI  *	{
122f89d2072SXin LI  *		const uint8_t *p = buf;
123f89d2072SXin LI  *		uint32_t crc;
124f89d2072SXin LI  *
125f89d2072SXin LI  *		crc = ~0U;
126f89d2072SXin LI  *		while (size--)
127f89d2072SXin LI  *			crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
128f89d2072SXin LI  *		return crc ^ ~0U;
129f89d2072SXin LI  *	}
130f89d2072SXin LI  */
131f89d2072SXin LI 
132f89d2072SXin LI /* CRC32C routines, these use a different polynomial */
133f89d2072SXin LI /*****************************************************************/
134f89d2072SXin LI /*                                                               */
135f89d2072SXin LI /* CRC LOOKUP TABLE                                              */
136f89d2072SXin LI /* ================                                              */
137f89d2072SXin LI /* The following CRC lookup table was generated automagically    */
138f89d2072SXin LI /* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
139f89d2072SXin LI /* Program V1.0 using the following model parameters:            */
140f89d2072SXin LI /*                                                               */
141f89d2072SXin LI /*    Width   : 4 bytes.                                         */
142f89d2072SXin LI /*    Poly    : 0x1EDC6F41L                                      */
143f89d2072SXin LI /*    Reverse : TRUE.                                            */
144f89d2072SXin LI /*                                                               */
145f89d2072SXin LI /* For more information on the Rocksoft^tm Model CRC Algorithm,  */
146f89d2072SXin LI /* see the document titled "A Painless Guide to CRC Error        */
147f89d2072SXin LI /* Detection Algorithms" by Ross Williams                        */
148f89d2072SXin LI /* (ross@guest.adelaide.edu.au.). This document is likely to be  */
149f89d2072SXin LI /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
150f89d2072SXin LI /*                                                               */
151f89d2072SXin LI /*****************************************************************/
152f89d2072SXin LI 
153f89d2072SXin LI static const uint32_t crc32Table[256] = {
154f89d2072SXin LI 	0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
155f89d2072SXin LI 	0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
156f89d2072SXin LI 	0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
157f89d2072SXin LI 	0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
158f89d2072SXin LI 	0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
159f89d2072SXin LI 	0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
160f89d2072SXin LI 	0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
161f89d2072SXin LI 	0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
162f89d2072SXin LI 	0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
163f89d2072SXin LI 	0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
164f89d2072SXin LI 	0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
165f89d2072SXin LI 	0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
166f89d2072SXin LI 	0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
167f89d2072SXin LI 	0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
168f89d2072SXin LI 	0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
169f89d2072SXin LI 	0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
170f89d2072SXin LI 	0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
171f89d2072SXin LI 	0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
172f89d2072SXin LI 	0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
173f89d2072SXin LI 	0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
174f89d2072SXin LI 	0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
175f89d2072SXin LI 	0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
176f89d2072SXin LI 	0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
177f89d2072SXin LI 	0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
178f89d2072SXin LI 	0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
179f89d2072SXin LI 	0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
180f89d2072SXin LI 	0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
181f89d2072SXin LI 	0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
182f89d2072SXin LI 	0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
183f89d2072SXin LI 	0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
184f89d2072SXin LI 	0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
185f89d2072SXin LI 	0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
186f89d2072SXin LI 	0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
187f89d2072SXin LI 	0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
188f89d2072SXin LI 	0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
189f89d2072SXin LI 	0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
190f89d2072SXin LI 	0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
191f89d2072SXin LI 	0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
192f89d2072SXin LI 	0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
193f89d2072SXin LI 	0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
194f89d2072SXin LI 	0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
195f89d2072SXin LI 	0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
196f89d2072SXin LI 	0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
197f89d2072SXin LI 	0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
198f89d2072SXin LI 	0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
199f89d2072SXin LI 	0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
200f89d2072SXin LI 	0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
201f89d2072SXin LI 	0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
202f89d2072SXin LI 	0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
203f89d2072SXin LI 	0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
204f89d2072SXin LI 	0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
205f89d2072SXin LI 	0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
206f89d2072SXin LI 	0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
207f89d2072SXin LI 	0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
208f89d2072SXin LI 	0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
209f89d2072SXin LI 	0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
210f89d2072SXin LI 	0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
211f89d2072SXin LI 	0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
212f89d2072SXin LI 	0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
213f89d2072SXin LI 	0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
214f89d2072SXin LI 	0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
215f89d2072SXin LI 	0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
216f89d2072SXin LI 	0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
217f89d2072SXin LI 	0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L
218f89d2072SXin LI };
219f89d2072SXin LI 
22083c20b8aSAlex Richardson #ifndef TESTING
22183c20b8aSAlex Richardson static
22283c20b8aSAlex Richardson #endif
22383c20b8aSAlex Richardson uint32_t
singletable_crc32c(uint32_t crc,const void * buf,size_t size)224f89d2072SXin LI singletable_crc32c(uint32_t crc, const void *buf, size_t size)
225f89d2072SXin LI {
226f89d2072SXin LI 	const uint8_t *p = buf;
227f89d2072SXin LI 
228f89d2072SXin LI 	while (size--)
229f89d2072SXin LI 		crc = crc32Table[(crc ^ *p++) & 0xff] ^ (crc >> 8);
230f89d2072SXin LI 
231f89d2072SXin LI 	return crc;
232f89d2072SXin LI }
233f89d2072SXin LI 
234cffca129SWarner Losh #ifndef _STANDALONE
235f89d2072SXin LI 
236f89d2072SXin LI /*
237f89d2072SXin LI  * Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
238f89d2072SXin LI  *
239f89d2072SXin LI  *
240f89d2072SXin LI  * This software program is licensed subject to the BSD License, available at
241f89d2072SXin LI  * http://www.opensource.org/licenses/bsd-license.html.
242f89d2072SXin LI  *
243f89d2072SXin LI  * Abstract:
244f89d2072SXin LI  *
245f89d2072SXin LI  * Tables for software CRC generation
246f89d2072SXin LI  */
247f89d2072SXin LI 
248f89d2072SXin LI /*
249f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
250f89d2072SXin LI  * following model parameters:
251f89d2072SXin LI  *
252f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
253f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
254f89d2072SXin LI  * Reflected Bits = ....................... TRUE
255f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
256f89d2072SXin LI  * Number of Slices = ..................... 8 slices
257f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
258f89d2072SXin LI  * Directory Name = ....................... .\
259f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
260f89d2072SXin LI  */
261f89d2072SXin LI 
262f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o32[256] =
263f89d2072SXin LI {
264f89d2072SXin LI 	0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
265f89d2072SXin LI 	0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
266f89d2072SXin LI 	0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
267f89d2072SXin LI 	0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
268f89d2072SXin LI 	0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
269f89d2072SXin LI 	0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
270f89d2072SXin LI 	0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
271f89d2072SXin LI 	0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
272f89d2072SXin LI 	0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
273f89d2072SXin LI 	0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
274f89d2072SXin LI 	0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
275f89d2072SXin LI 	0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
276f89d2072SXin LI 	0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
277f89d2072SXin LI 	0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
278f89d2072SXin LI 	0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
279f89d2072SXin LI 	0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
280f89d2072SXin LI 	0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
281f89d2072SXin LI 	0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
282f89d2072SXin LI 	0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
283f89d2072SXin LI 	0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
284f89d2072SXin LI 	0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
285f89d2072SXin LI 	0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
286f89d2072SXin LI 	0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
287f89d2072SXin LI 	0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
288f89d2072SXin LI 	0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
289f89d2072SXin LI 	0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
290f89d2072SXin LI 	0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
291f89d2072SXin LI 	0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
292f89d2072SXin LI 	0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
293f89d2072SXin LI 	0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
294f89d2072SXin LI 	0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
295f89d2072SXin LI 	0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
296f89d2072SXin LI };
297f89d2072SXin LI 
298f89d2072SXin LI /*
299f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o32
300f89d2072SXin LI  */
301f89d2072SXin LI 
302f89d2072SXin LI /*
303f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
304f89d2072SXin LI  * following model parameters:
305f89d2072SXin LI  *
306f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
307f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
308f89d2072SXin LI  * Reflected Bits = ....................... TRUE
309f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
310f89d2072SXin LI  * Number of Slices = ..................... 8 slices
311f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
312f89d2072SXin LI  * Directory Name = ....................... .\
313f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
314f89d2072SXin LI  */
315f89d2072SXin LI 
316f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o40[256] =
317f89d2072SXin LI {
318f89d2072SXin LI 	0x00000000, 0x13A29877, 0x274530EE, 0x34E7A899, 0x4E8A61DC, 0x5D28F9AB, 0x69CF5132, 0x7A6DC945,
319f89d2072SXin LI 	0x9D14C3B8, 0x8EB65BCF, 0xBA51F356, 0xA9F36B21, 0xD39EA264, 0xC03C3A13, 0xF4DB928A, 0xE7790AFD,
320f89d2072SXin LI 	0x3FC5F181, 0x2C6769F6, 0x1880C16F, 0x0B225918, 0x714F905D, 0x62ED082A, 0x560AA0B3, 0x45A838C4,
321f89d2072SXin LI 	0xA2D13239, 0xB173AA4E, 0x859402D7, 0x96369AA0, 0xEC5B53E5, 0xFFF9CB92, 0xCB1E630B, 0xD8BCFB7C,
322f89d2072SXin LI 	0x7F8BE302, 0x6C297B75, 0x58CED3EC, 0x4B6C4B9B, 0x310182DE, 0x22A31AA9, 0x1644B230, 0x05E62A47,
323f89d2072SXin LI 	0xE29F20BA, 0xF13DB8CD, 0xC5DA1054, 0xD6788823, 0xAC154166, 0xBFB7D911, 0x8B507188, 0x98F2E9FF,
324f89d2072SXin LI 	0x404E1283, 0x53EC8AF4, 0x670B226D, 0x74A9BA1A, 0x0EC4735F, 0x1D66EB28, 0x298143B1, 0x3A23DBC6,
325f89d2072SXin LI 	0xDD5AD13B, 0xCEF8494C, 0xFA1FE1D5, 0xE9BD79A2, 0x93D0B0E7, 0x80722890, 0xB4958009, 0xA737187E,
326f89d2072SXin LI 	0xFF17C604, 0xECB55E73, 0xD852F6EA, 0xCBF06E9D, 0xB19DA7D8, 0xA23F3FAF, 0x96D89736, 0x857A0F41,
327f89d2072SXin LI 	0x620305BC, 0x71A19DCB, 0x45463552, 0x56E4AD25, 0x2C896460, 0x3F2BFC17, 0x0BCC548E, 0x186ECCF9,
328f89d2072SXin LI 	0xC0D23785, 0xD370AFF2, 0xE797076B, 0xF4359F1C, 0x8E585659, 0x9DFACE2E, 0xA91D66B7, 0xBABFFEC0,
329f89d2072SXin LI 	0x5DC6F43D, 0x4E646C4A, 0x7A83C4D3, 0x69215CA4, 0x134C95E1, 0x00EE0D96, 0x3409A50F, 0x27AB3D78,
330f89d2072SXin LI 	0x809C2506, 0x933EBD71, 0xA7D915E8, 0xB47B8D9F, 0xCE1644DA, 0xDDB4DCAD, 0xE9537434, 0xFAF1EC43,
331f89d2072SXin LI 	0x1D88E6BE, 0x0E2A7EC9, 0x3ACDD650, 0x296F4E27, 0x53028762, 0x40A01F15, 0x7447B78C, 0x67E52FFB,
332f89d2072SXin LI 	0xBF59D487, 0xACFB4CF0, 0x981CE469, 0x8BBE7C1E, 0xF1D3B55B, 0xE2712D2C, 0xD69685B5, 0xC5341DC2,
333f89d2072SXin LI 	0x224D173F, 0x31EF8F48, 0x050827D1, 0x16AABFA6, 0x6CC776E3, 0x7F65EE94, 0x4B82460D, 0x5820DE7A,
334f89d2072SXin LI 	0xFBC3FAF9, 0xE861628E, 0xDC86CA17, 0xCF245260, 0xB5499B25, 0xA6EB0352, 0x920CABCB, 0x81AE33BC,
335f89d2072SXin LI 	0x66D73941, 0x7575A136, 0x419209AF, 0x523091D8, 0x285D589D, 0x3BFFC0EA, 0x0F186873, 0x1CBAF004,
336f89d2072SXin LI 	0xC4060B78, 0xD7A4930F, 0xE3433B96, 0xF0E1A3E1, 0x8A8C6AA4, 0x992EF2D3, 0xADC95A4A, 0xBE6BC23D,
337f89d2072SXin LI 	0x5912C8C0, 0x4AB050B7, 0x7E57F82E, 0x6DF56059, 0x1798A91C, 0x043A316B, 0x30DD99F2, 0x237F0185,
338f89d2072SXin LI 	0x844819FB, 0x97EA818C, 0xA30D2915, 0xB0AFB162, 0xCAC27827, 0xD960E050, 0xED8748C9, 0xFE25D0BE,
339f89d2072SXin LI 	0x195CDA43, 0x0AFE4234, 0x3E19EAAD, 0x2DBB72DA, 0x57D6BB9F, 0x447423E8, 0x70938B71, 0x63311306,
340f89d2072SXin LI 	0xBB8DE87A, 0xA82F700D, 0x9CC8D894, 0x8F6A40E3, 0xF50789A6, 0xE6A511D1, 0xD242B948, 0xC1E0213F,
341f89d2072SXin LI 	0x26992BC2, 0x353BB3B5, 0x01DC1B2C, 0x127E835B, 0x68134A1E, 0x7BB1D269, 0x4F567AF0, 0x5CF4E287,
342f89d2072SXin LI 	0x04D43CFD, 0x1776A48A, 0x23910C13, 0x30339464, 0x4A5E5D21, 0x59FCC556, 0x6D1B6DCF, 0x7EB9F5B8,
343f89d2072SXin LI 	0x99C0FF45, 0x8A626732, 0xBE85CFAB, 0xAD2757DC, 0xD74A9E99, 0xC4E806EE, 0xF00FAE77, 0xE3AD3600,
344f89d2072SXin LI 	0x3B11CD7C, 0x28B3550B, 0x1C54FD92, 0x0FF665E5, 0x759BACA0, 0x663934D7, 0x52DE9C4E, 0x417C0439,
345f89d2072SXin LI 	0xA6050EC4, 0xB5A796B3, 0x81403E2A, 0x92E2A65D, 0xE88F6F18, 0xFB2DF76F, 0xCFCA5FF6, 0xDC68C781,
346f89d2072SXin LI 	0x7B5FDFFF, 0x68FD4788, 0x5C1AEF11, 0x4FB87766, 0x35D5BE23, 0x26772654, 0x12908ECD, 0x013216BA,
347f89d2072SXin LI 	0xE64B1C47, 0xF5E98430, 0xC10E2CA9, 0xD2ACB4DE, 0xA8C17D9B, 0xBB63E5EC, 0x8F844D75, 0x9C26D502,
348f89d2072SXin LI 	0x449A2E7E, 0x5738B609, 0x63DF1E90, 0x707D86E7, 0x0A104FA2, 0x19B2D7D5, 0x2D557F4C, 0x3EF7E73B,
349f89d2072SXin LI 	0xD98EEDC6, 0xCA2C75B1, 0xFECBDD28, 0xED69455F, 0x97048C1A, 0x84A6146D, 0xB041BCF4, 0xA3E32483
350f89d2072SXin LI };
351f89d2072SXin LI 
352f89d2072SXin LI /*
353f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o40
354f89d2072SXin LI  */
355f89d2072SXin LI 
356f89d2072SXin LI /*
357f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
358f89d2072SXin LI  * following model parameters:
359f89d2072SXin LI  *
360f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
361f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
362f89d2072SXin LI  * Reflected Bits = ....................... TRUE
363f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
364f89d2072SXin LI  * Number of Slices = ..................... 8 slices
365f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
366f89d2072SXin LI  * Directory Name = ....................... .\
367f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
368f89d2072SXin LI  */
369f89d2072SXin LI 
370f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o48[256] =
371f89d2072SXin LI {
372f89d2072SXin LI 	0x00000000, 0xA541927E, 0x4F6F520D, 0xEA2EC073, 0x9EDEA41A, 0x3B9F3664, 0xD1B1F617, 0x74F06469,
373f89d2072SXin LI 	0x38513EC5, 0x9D10ACBB, 0x773E6CC8, 0xD27FFEB6, 0xA68F9ADF, 0x03CE08A1, 0xE9E0C8D2, 0x4CA15AAC,
374f89d2072SXin LI 	0x70A27D8A, 0xD5E3EFF4, 0x3FCD2F87, 0x9A8CBDF9, 0xEE7CD990, 0x4B3D4BEE, 0xA1138B9D, 0x045219E3,
375f89d2072SXin LI 	0x48F3434F, 0xEDB2D131, 0x079C1142, 0xA2DD833C, 0xD62DE755, 0x736C752B, 0x9942B558, 0x3C032726,
376f89d2072SXin LI 	0xE144FB14, 0x4405696A, 0xAE2BA919, 0x0B6A3B67, 0x7F9A5F0E, 0xDADBCD70, 0x30F50D03, 0x95B49F7D,
377f89d2072SXin LI 	0xD915C5D1, 0x7C5457AF, 0x967A97DC, 0x333B05A2, 0x47CB61CB, 0xE28AF3B5, 0x08A433C6, 0xADE5A1B8,
378f89d2072SXin LI 	0x91E6869E, 0x34A714E0, 0xDE89D493, 0x7BC846ED, 0x0F382284, 0xAA79B0FA, 0x40577089, 0xE516E2F7,
379f89d2072SXin LI 	0xA9B7B85B, 0x0CF62A25, 0xE6D8EA56, 0x43997828, 0x37691C41, 0x92288E3F, 0x78064E4C, 0xDD47DC32,
380f89d2072SXin LI 	0xC76580D9, 0x622412A7, 0x880AD2D4, 0x2D4B40AA, 0x59BB24C3, 0xFCFAB6BD, 0x16D476CE, 0xB395E4B0,
381f89d2072SXin LI 	0xFF34BE1C, 0x5A752C62, 0xB05BEC11, 0x151A7E6F, 0x61EA1A06, 0xC4AB8878, 0x2E85480B, 0x8BC4DA75,
382f89d2072SXin LI 	0xB7C7FD53, 0x12866F2D, 0xF8A8AF5E, 0x5DE93D20, 0x29195949, 0x8C58CB37, 0x66760B44, 0xC337993A,
383f89d2072SXin LI 	0x8F96C396, 0x2AD751E8, 0xC0F9919B, 0x65B803E5, 0x1148678C, 0xB409F5F2, 0x5E273581, 0xFB66A7FF,
384f89d2072SXin LI 	0x26217BCD, 0x8360E9B3, 0x694E29C0, 0xCC0FBBBE, 0xB8FFDFD7, 0x1DBE4DA9, 0xF7908DDA, 0x52D11FA4,
385f89d2072SXin LI 	0x1E704508, 0xBB31D776, 0x511F1705, 0xF45E857B, 0x80AEE112, 0x25EF736C, 0xCFC1B31F, 0x6A802161,
386f89d2072SXin LI 	0x56830647, 0xF3C29439, 0x19EC544A, 0xBCADC634, 0xC85DA25D, 0x6D1C3023, 0x8732F050, 0x2273622E,
387f89d2072SXin LI 	0x6ED23882, 0xCB93AAFC, 0x21BD6A8F, 0x84FCF8F1, 0xF00C9C98, 0x554D0EE6, 0xBF63CE95, 0x1A225CEB,
388f89d2072SXin LI 	0x8B277743, 0x2E66E53D, 0xC448254E, 0x6109B730, 0x15F9D359, 0xB0B84127, 0x5A968154, 0xFFD7132A,
389f89d2072SXin LI 	0xB3764986, 0x1637DBF8, 0xFC191B8B, 0x595889F5, 0x2DA8ED9C, 0x88E97FE2, 0x62C7BF91, 0xC7862DEF,
390f89d2072SXin LI 	0xFB850AC9, 0x5EC498B7, 0xB4EA58C4, 0x11ABCABA, 0x655BAED3, 0xC01A3CAD, 0x2A34FCDE, 0x8F756EA0,
391f89d2072SXin LI 	0xC3D4340C, 0x6695A672, 0x8CBB6601, 0x29FAF47F, 0x5D0A9016, 0xF84B0268, 0x1265C21B, 0xB7245065,
392f89d2072SXin LI 	0x6A638C57, 0xCF221E29, 0x250CDE5A, 0x804D4C24, 0xF4BD284D, 0x51FCBA33, 0xBBD27A40, 0x1E93E83E,
393f89d2072SXin LI 	0x5232B292, 0xF77320EC, 0x1D5DE09F, 0xB81C72E1, 0xCCEC1688, 0x69AD84F6, 0x83834485, 0x26C2D6FB,
394f89d2072SXin LI 	0x1AC1F1DD, 0xBF8063A3, 0x55AEA3D0, 0xF0EF31AE, 0x841F55C7, 0x215EC7B9, 0xCB7007CA, 0x6E3195B4,
395f89d2072SXin LI 	0x2290CF18, 0x87D15D66, 0x6DFF9D15, 0xC8BE0F6B, 0xBC4E6B02, 0x190FF97C, 0xF321390F, 0x5660AB71,
396f89d2072SXin LI 	0x4C42F79A, 0xE90365E4, 0x032DA597, 0xA66C37E9, 0xD29C5380, 0x77DDC1FE, 0x9DF3018D, 0x38B293F3,
397f89d2072SXin LI 	0x7413C95F, 0xD1525B21, 0x3B7C9B52, 0x9E3D092C, 0xEACD6D45, 0x4F8CFF3B, 0xA5A23F48, 0x00E3AD36,
398f89d2072SXin LI 	0x3CE08A10, 0x99A1186E, 0x738FD81D, 0xD6CE4A63, 0xA23E2E0A, 0x077FBC74, 0xED517C07, 0x4810EE79,
399f89d2072SXin LI 	0x04B1B4D5, 0xA1F026AB, 0x4BDEE6D8, 0xEE9F74A6, 0x9A6F10CF, 0x3F2E82B1, 0xD50042C2, 0x7041D0BC,
400f89d2072SXin LI 	0xAD060C8E, 0x08479EF0, 0xE2695E83, 0x4728CCFD, 0x33D8A894, 0x96993AEA, 0x7CB7FA99, 0xD9F668E7,
401f89d2072SXin LI 	0x9557324B, 0x3016A035, 0xDA386046, 0x7F79F238, 0x0B899651, 0xAEC8042F, 0x44E6C45C, 0xE1A75622,
402f89d2072SXin LI 	0xDDA47104, 0x78E5E37A, 0x92CB2309, 0x378AB177, 0x437AD51E, 0xE63B4760, 0x0C158713, 0xA954156D,
403f89d2072SXin LI 	0xE5F54FC1, 0x40B4DDBF, 0xAA9A1DCC, 0x0FDB8FB2, 0x7B2BEBDB, 0xDE6A79A5, 0x3444B9D6, 0x91052BA8
404f89d2072SXin LI };
405f89d2072SXin LI 
406f89d2072SXin LI /*
407f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o48
408f89d2072SXin LI  */
409f89d2072SXin LI 
410f89d2072SXin LI /*
411f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
412f89d2072SXin LI  * following model parameters:
413f89d2072SXin LI  *
414f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
415f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
416f89d2072SXin LI  * Reflected Bits = ....................... TRUE
417f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
418f89d2072SXin LI  * Number of Slices = ..................... 8 slices
419f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
420f89d2072SXin LI  * Directory Name = ....................... .\
421f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
422f89d2072SXin LI  */
423f89d2072SXin LI 
424f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o56[256] =
425f89d2072SXin LI {
426f89d2072SXin LI 	0x00000000, 0xDD45AAB8, 0xBF672381, 0x62228939, 0x7B2231F3, 0xA6679B4B, 0xC4451272, 0x1900B8CA,
427f89d2072SXin LI 	0xF64463E6, 0x2B01C95E, 0x49234067, 0x9466EADF, 0x8D665215, 0x5023F8AD, 0x32017194, 0xEF44DB2C,
428f89d2072SXin LI 	0xE964B13D, 0x34211B85, 0x560392BC, 0x8B463804, 0x924680CE, 0x4F032A76, 0x2D21A34F, 0xF06409F7,
429f89d2072SXin LI 	0x1F20D2DB, 0xC2657863, 0xA047F15A, 0x7D025BE2, 0x6402E328, 0xB9474990, 0xDB65C0A9, 0x06206A11,
430f89d2072SXin LI 	0xD725148B, 0x0A60BE33, 0x6842370A, 0xB5079DB2, 0xAC072578, 0x71428FC0, 0x136006F9, 0xCE25AC41,
431f89d2072SXin LI 	0x2161776D, 0xFC24DDD5, 0x9E0654EC, 0x4343FE54, 0x5A43469E, 0x8706EC26, 0xE524651F, 0x3861CFA7,
432f89d2072SXin LI 	0x3E41A5B6, 0xE3040F0E, 0x81268637, 0x5C632C8F, 0x45639445, 0x98263EFD, 0xFA04B7C4, 0x27411D7C,
433f89d2072SXin LI 	0xC805C650, 0x15406CE8, 0x7762E5D1, 0xAA274F69, 0xB327F7A3, 0x6E625D1B, 0x0C40D422, 0xD1057E9A,
434f89d2072SXin LI 	0xABA65FE7, 0x76E3F55F, 0x14C17C66, 0xC984D6DE, 0xD0846E14, 0x0DC1C4AC, 0x6FE34D95, 0xB2A6E72D,
435f89d2072SXin LI 	0x5DE23C01, 0x80A796B9, 0xE2851F80, 0x3FC0B538, 0x26C00DF2, 0xFB85A74A, 0x99A72E73, 0x44E284CB,
436f89d2072SXin LI 	0x42C2EEDA, 0x9F874462, 0xFDA5CD5B, 0x20E067E3, 0x39E0DF29, 0xE4A57591, 0x8687FCA8, 0x5BC25610,
437f89d2072SXin LI 	0xB4868D3C, 0x69C32784, 0x0BE1AEBD, 0xD6A40405, 0xCFA4BCCF, 0x12E11677, 0x70C39F4E, 0xAD8635F6,
438f89d2072SXin LI 	0x7C834B6C, 0xA1C6E1D4, 0xC3E468ED, 0x1EA1C255, 0x07A17A9F, 0xDAE4D027, 0xB8C6591E, 0x6583F3A6,
439f89d2072SXin LI 	0x8AC7288A, 0x57828232, 0x35A00B0B, 0xE8E5A1B3, 0xF1E51979, 0x2CA0B3C1, 0x4E823AF8, 0x93C79040,
440f89d2072SXin LI 	0x95E7FA51, 0x48A250E9, 0x2A80D9D0, 0xF7C57368, 0xEEC5CBA2, 0x3380611A, 0x51A2E823, 0x8CE7429B,
441f89d2072SXin LI 	0x63A399B7, 0xBEE6330F, 0xDCC4BA36, 0x0181108E, 0x1881A844, 0xC5C402FC, 0xA7E68BC5, 0x7AA3217D,
442f89d2072SXin LI 	0x52A0C93F, 0x8FE56387, 0xEDC7EABE, 0x30824006, 0x2982F8CC, 0xF4C75274, 0x96E5DB4D, 0x4BA071F5,
443f89d2072SXin LI 	0xA4E4AAD9, 0x79A10061, 0x1B838958, 0xC6C623E0, 0xDFC69B2A, 0x02833192, 0x60A1B8AB, 0xBDE41213,
444f89d2072SXin LI 	0xBBC47802, 0x6681D2BA, 0x04A35B83, 0xD9E6F13B, 0xC0E649F1, 0x1DA3E349, 0x7F816A70, 0xA2C4C0C8,
445f89d2072SXin LI 	0x4D801BE4, 0x90C5B15C, 0xF2E73865, 0x2FA292DD, 0x36A22A17, 0xEBE780AF, 0x89C50996, 0x5480A32E,
446f89d2072SXin LI 	0x8585DDB4, 0x58C0770C, 0x3AE2FE35, 0xE7A7548D, 0xFEA7EC47, 0x23E246FF, 0x41C0CFC6, 0x9C85657E,
447f89d2072SXin LI 	0x73C1BE52, 0xAE8414EA, 0xCCA69DD3, 0x11E3376B, 0x08E38FA1, 0xD5A62519, 0xB784AC20, 0x6AC10698,
448f89d2072SXin LI 	0x6CE16C89, 0xB1A4C631, 0xD3864F08, 0x0EC3E5B0, 0x17C35D7A, 0xCA86F7C2, 0xA8A47EFB, 0x75E1D443,
449f89d2072SXin LI 	0x9AA50F6F, 0x47E0A5D7, 0x25C22CEE, 0xF8878656, 0xE1873E9C, 0x3CC29424, 0x5EE01D1D, 0x83A5B7A5,
450f89d2072SXin LI 	0xF90696D8, 0x24433C60, 0x4661B559, 0x9B241FE1, 0x8224A72B, 0x5F610D93, 0x3D4384AA, 0xE0062E12,
451f89d2072SXin LI 	0x0F42F53E, 0xD2075F86, 0xB025D6BF, 0x6D607C07, 0x7460C4CD, 0xA9256E75, 0xCB07E74C, 0x16424DF4,
452f89d2072SXin LI 	0x106227E5, 0xCD278D5D, 0xAF050464, 0x7240AEDC, 0x6B401616, 0xB605BCAE, 0xD4273597, 0x09629F2F,
453f89d2072SXin LI 	0xE6264403, 0x3B63EEBB, 0x59416782, 0x8404CD3A, 0x9D0475F0, 0x4041DF48, 0x22635671, 0xFF26FCC9,
454f89d2072SXin LI 	0x2E238253, 0xF36628EB, 0x9144A1D2, 0x4C010B6A, 0x5501B3A0, 0x88441918, 0xEA669021, 0x37233A99,
455f89d2072SXin LI 	0xD867E1B5, 0x05224B0D, 0x6700C234, 0xBA45688C, 0xA345D046, 0x7E007AFE, 0x1C22F3C7, 0xC167597F,
456f89d2072SXin LI 	0xC747336E, 0x1A0299D6, 0x782010EF, 0xA565BA57, 0xBC65029D, 0x6120A825, 0x0302211C, 0xDE478BA4,
457f89d2072SXin LI 	0x31035088, 0xEC46FA30, 0x8E647309, 0x5321D9B1, 0x4A21617B, 0x9764CBC3, 0xF54642FA, 0x2803E842
458f89d2072SXin LI };
459f89d2072SXin LI 
460f89d2072SXin LI /*
461f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o56
462f89d2072SXin LI  */
463f89d2072SXin LI 
464f89d2072SXin LI /*
465f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
466f89d2072SXin LI  * following model parameters:
467f89d2072SXin LI  *
468f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
469f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
470f89d2072SXin LI  * Reflected Bits = ....................... TRUE
471f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
472f89d2072SXin LI  * Number of Slices = ..................... 8 slices
473f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
474f89d2072SXin LI  * Directory Name = ....................... .\
475f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
476f89d2072SXin LI  */
477f89d2072SXin LI 
478f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o64[256] =
479f89d2072SXin LI {
480f89d2072SXin LI 	0x00000000, 0x38116FAC, 0x7022DF58, 0x4833B0F4, 0xE045BEB0, 0xD854D11C, 0x906761E8, 0xA8760E44,
481f89d2072SXin LI 	0xC5670B91, 0xFD76643D, 0xB545D4C9, 0x8D54BB65, 0x2522B521, 0x1D33DA8D, 0x55006A79, 0x6D1105D5,
482f89d2072SXin LI 	0x8F2261D3, 0xB7330E7F, 0xFF00BE8B, 0xC711D127, 0x6F67DF63, 0x5776B0CF, 0x1F45003B, 0x27546F97,
483f89d2072SXin LI 	0x4A456A42, 0x725405EE, 0x3A67B51A, 0x0276DAB6, 0xAA00D4F2, 0x9211BB5E, 0xDA220BAA, 0xE2336406,
484f89d2072SXin LI 	0x1BA8B557, 0x23B9DAFB, 0x6B8A6A0F, 0x539B05A3, 0xFBED0BE7, 0xC3FC644B, 0x8BCFD4BF, 0xB3DEBB13,
485f89d2072SXin LI 	0xDECFBEC6, 0xE6DED16A, 0xAEED619E, 0x96FC0E32, 0x3E8A0076, 0x069B6FDA, 0x4EA8DF2E, 0x76B9B082,
486f89d2072SXin LI 	0x948AD484, 0xAC9BBB28, 0xE4A80BDC, 0xDCB96470, 0x74CF6A34, 0x4CDE0598, 0x04EDB56C, 0x3CFCDAC0,
487f89d2072SXin LI 	0x51EDDF15, 0x69FCB0B9, 0x21CF004D, 0x19DE6FE1, 0xB1A861A5, 0x89B90E09, 0xC18ABEFD, 0xF99BD151,
488f89d2072SXin LI 	0x37516AAE, 0x0F400502, 0x4773B5F6, 0x7F62DA5A, 0xD714D41E, 0xEF05BBB2, 0xA7360B46, 0x9F2764EA,
489f89d2072SXin LI 	0xF236613F, 0xCA270E93, 0x8214BE67, 0xBA05D1CB, 0x1273DF8F, 0x2A62B023, 0x625100D7, 0x5A406F7B,
490f89d2072SXin LI 	0xB8730B7D, 0x806264D1, 0xC851D425, 0xF040BB89, 0x5836B5CD, 0x6027DA61, 0x28146A95, 0x10050539,
491f89d2072SXin LI 	0x7D1400EC, 0x45056F40, 0x0D36DFB4, 0x3527B018, 0x9D51BE5C, 0xA540D1F0, 0xED736104, 0xD5620EA8,
492f89d2072SXin LI 	0x2CF9DFF9, 0x14E8B055, 0x5CDB00A1, 0x64CA6F0D, 0xCCBC6149, 0xF4AD0EE5, 0xBC9EBE11, 0x848FD1BD,
493f89d2072SXin LI 	0xE99ED468, 0xD18FBBC4, 0x99BC0B30, 0xA1AD649C, 0x09DB6AD8, 0x31CA0574, 0x79F9B580, 0x41E8DA2C,
494f89d2072SXin LI 	0xA3DBBE2A, 0x9BCAD186, 0xD3F96172, 0xEBE80EDE, 0x439E009A, 0x7B8F6F36, 0x33BCDFC2, 0x0BADB06E,
495f89d2072SXin LI 	0x66BCB5BB, 0x5EADDA17, 0x169E6AE3, 0x2E8F054F, 0x86F90B0B, 0xBEE864A7, 0xF6DBD453, 0xCECABBFF,
496f89d2072SXin LI 	0x6EA2D55C, 0x56B3BAF0, 0x1E800A04, 0x269165A8, 0x8EE76BEC, 0xB6F60440, 0xFEC5B4B4, 0xC6D4DB18,
497f89d2072SXin LI 	0xABC5DECD, 0x93D4B161, 0xDBE70195, 0xE3F66E39, 0x4B80607D, 0x73910FD1, 0x3BA2BF25, 0x03B3D089,
498f89d2072SXin LI 	0xE180B48F, 0xD991DB23, 0x91A26BD7, 0xA9B3047B, 0x01C50A3F, 0x39D46593, 0x71E7D567, 0x49F6BACB,
499f89d2072SXin LI 	0x24E7BF1E, 0x1CF6D0B2, 0x54C56046, 0x6CD40FEA, 0xC4A201AE, 0xFCB36E02, 0xB480DEF6, 0x8C91B15A,
500f89d2072SXin LI 	0x750A600B, 0x4D1B0FA7, 0x0528BF53, 0x3D39D0FF, 0x954FDEBB, 0xAD5EB117, 0xE56D01E3, 0xDD7C6E4F,
501f89d2072SXin LI 	0xB06D6B9A, 0x887C0436, 0xC04FB4C2, 0xF85EDB6E, 0x5028D52A, 0x6839BA86, 0x200A0A72, 0x181B65DE,
502f89d2072SXin LI 	0xFA2801D8, 0xC2396E74, 0x8A0ADE80, 0xB21BB12C, 0x1A6DBF68, 0x227CD0C4, 0x6A4F6030, 0x525E0F9C,
503f89d2072SXin LI 	0x3F4F0A49, 0x075E65E5, 0x4F6DD511, 0x777CBABD, 0xDF0AB4F9, 0xE71BDB55, 0xAF286BA1, 0x9739040D,
504f89d2072SXin LI 	0x59F3BFF2, 0x61E2D05E, 0x29D160AA, 0x11C00F06, 0xB9B60142, 0x81A76EEE, 0xC994DE1A, 0xF185B1B6,
505f89d2072SXin LI 	0x9C94B463, 0xA485DBCF, 0xECB66B3B, 0xD4A70497, 0x7CD10AD3, 0x44C0657F, 0x0CF3D58B, 0x34E2BA27,
506f89d2072SXin LI 	0xD6D1DE21, 0xEEC0B18D, 0xA6F30179, 0x9EE26ED5, 0x36946091, 0x0E850F3D, 0x46B6BFC9, 0x7EA7D065,
507f89d2072SXin LI 	0x13B6D5B0, 0x2BA7BA1C, 0x63940AE8, 0x5B856544, 0xF3F36B00, 0xCBE204AC, 0x83D1B458, 0xBBC0DBF4,
508f89d2072SXin LI 	0x425B0AA5, 0x7A4A6509, 0x3279D5FD, 0x0A68BA51, 0xA21EB415, 0x9A0FDBB9, 0xD23C6B4D, 0xEA2D04E1,
509f89d2072SXin LI 	0x873C0134, 0xBF2D6E98, 0xF71EDE6C, 0xCF0FB1C0, 0x6779BF84, 0x5F68D028, 0x175B60DC, 0x2F4A0F70,
510f89d2072SXin LI 	0xCD796B76, 0xF56804DA, 0xBD5BB42E, 0x854ADB82, 0x2D3CD5C6, 0x152DBA6A, 0x5D1E0A9E, 0x650F6532,
511f89d2072SXin LI 	0x081E60E7, 0x300F0F4B, 0x783CBFBF, 0x402DD013, 0xE85BDE57, 0xD04AB1FB, 0x9879010F, 0xA0686EA3
512f89d2072SXin LI };
513f89d2072SXin LI 
514f89d2072SXin LI /*
515f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o64
516f89d2072SXin LI  */
517f89d2072SXin LI 
518f89d2072SXin LI /*
519f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
520f89d2072SXin LI  * following model parameters:
521f89d2072SXin LI  *
522f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
523f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
524f89d2072SXin LI  * Reflected Bits = ....................... TRUE
525f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
526f89d2072SXin LI  * Number of Slices = ..................... 8 slices
527f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
528f89d2072SXin LI  * Directory Name = ....................... .\
529f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
530f89d2072SXin LI  */
531f89d2072SXin LI 
532f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o72[256] =
533f89d2072SXin LI {
534f89d2072SXin LI 	0x00000000, 0xEF306B19, 0xDB8CA0C3, 0x34BCCBDA, 0xB2F53777, 0x5DC55C6E, 0x697997B4, 0x8649FCAD,
535f89d2072SXin LI 	0x6006181F, 0x8F367306, 0xBB8AB8DC, 0x54BAD3C5, 0xD2F32F68, 0x3DC34471, 0x097F8FAB, 0xE64FE4B2,
536f89d2072SXin LI 	0xC00C303E, 0x2F3C5B27, 0x1B8090FD, 0xF4B0FBE4, 0x72F90749, 0x9DC96C50, 0xA975A78A, 0x4645CC93,
537f89d2072SXin LI 	0xA00A2821, 0x4F3A4338, 0x7B8688E2, 0x94B6E3FB, 0x12FF1F56, 0xFDCF744F, 0xC973BF95, 0x2643D48C,
538f89d2072SXin LI 	0x85F4168D, 0x6AC47D94, 0x5E78B64E, 0xB148DD57, 0x370121FA, 0xD8314AE3, 0xEC8D8139, 0x03BDEA20,
539f89d2072SXin LI 	0xE5F20E92, 0x0AC2658B, 0x3E7EAE51, 0xD14EC548, 0x570739E5, 0xB83752FC, 0x8C8B9926, 0x63BBF23F,
540f89d2072SXin LI 	0x45F826B3, 0xAAC84DAA, 0x9E748670, 0x7144ED69, 0xF70D11C4, 0x183D7ADD, 0x2C81B107, 0xC3B1DA1E,
541f89d2072SXin LI 	0x25FE3EAC, 0xCACE55B5, 0xFE729E6F, 0x1142F576, 0x970B09DB, 0x783B62C2, 0x4C87A918, 0xA3B7C201,
542f89d2072SXin LI 	0x0E045BEB, 0xE13430F2, 0xD588FB28, 0x3AB89031, 0xBCF16C9C, 0x53C10785, 0x677DCC5F, 0x884DA746,
543f89d2072SXin LI 	0x6E0243F4, 0x813228ED, 0xB58EE337, 0x5ABE882E, 0xDCF77483, 0x33C71F9A, 0x077BD440, 0xE84BBF59,
544f89d2072SXin LI 	0xCE086BD5, 0x213800CC, 0x1584CB16, 0xFAB4A00F, 0x7CFD5CA2, 0x93CD37BB, 0xA771FC61, 0x48419778,
545f89d2072SXin LI 	0xAE0E73CA, 0x413E18D3, 0x7582D309, 0x9AB2B810, 0x1CFB44BD, 0xF3CB2FA4, 0xC777E47E, 0x28478F67,
546f89d2072SXin LI 	0x8BF04D66, 0x64C0267F, 0x507CEDA5, 0xBF4C86BC, 0x39057A11, 0xD6351108, 0xE289DAD2, 0x0DB9B1CB,
547f89d2072SXin LI 	0xEBF65579, 0x04C63E60, 0x307AF5BA, 0xDF4A9EA3, 0x5903620E, 0xB6330917, 0x828FC2CD, 0x6DBFA9D4,
548f89d2072SXin LI 	0x4BFC7D58, 0xA4CC1641, 0x9070DD9B, 0x7F40B682, 0xF9094A2F, 0x16392136, 0x2285EAEC, 0xCDB581F5,
549f89d2072SXin LI 	0x2BFA6547, 0xC4CA0E5E, 0xF076C584, 0x1F46AE9D, 0x990F5230, 0x763F3929, 0x4283F2F3, 0xADB399EA,
550f89d2072SXin LI 	0x1C08B7D6, 0xF338DCCF, 0xC7841715, 0x28B47C0C, 0xAEFD80A1, 0x41CDEBB8, 0x75712062, 0x9A414B7B,
551f89d2072SXin LI 	0x7C0EAFC9, 0x933EC4D0, 0xA7820F0A, 0x48B26413, 0xCEFB98BE, 0x21CBF3A7, 0x1577387D, 0xFA475364,
552f89d2072SXin LI 	0xDC0487E8, 0x3334ECF1, 0x0788272B, 0xE8B84C32, 0x6EF1B09F, 0x81C1DB86, 0xB57D105C, 0x5A4D7B45,
553f89d2072SXin LI 	0xBC029FF7, 0x5332F4EE, 0x678E3F34, 0x88BE542D, 0x0EF7A880, 0xE1C7C399, 0xD57B0843, 0x3A4B635A,
554f89d2072SXin LI 	0x99FCA15B, 0x76CCCA42, 0x42700198, 0xAD406A81, 0x2B09962C, 0xC439FD35, 0xF08536EF, 0x1FB55DF6,
555f89d2072SXin LI 	0xF9FAB944, 0x16CAD25D, 0x22761987, 0xCD46729E, 0x4B0F8E33, 0xA43FE52A, 0x90832EF0, 0x7FB345E9,
556f89d2072SXin LI 	0x59F09165, 0xB6C0FA7C, 0x827C31A6, 0x6D4C5ABF, 0xEB05A612, 0x0435CD0B, 0x308906D1, 0xDFB96DC8,
557f89d2072SXin LI 	0x39F6897A, 0xD6C6E263, 0xE27A29B9, 0x0D4A42A0, 0x8B03BE0D, 0x6433D514, 0x508F1ECE, 0xBFBF75D7,
558f89d2072SXin LI 	0x120CEC3D, 0xFD3C8724, 0xC9804CFE, 0x26B027E7, 0xA0F9DB4A, 0x4FC9B053, 0x7B757B89, 0x94451090,
559f89d2072SXin LI 	0x720AF422, 0x9D3A9F3B, 0xA98654E1, 0x46B63FF8, 0xC0FFC355, 0x2FCFA84C, 0x1B736396, 0xF443088F,
560f89d2072SXin LI 	0xD200DC03, 0x3D30B71A, 0x098C7CC0, 0xE6BC17D9, 0x60F5EB74, 0x8FC5806D, 0xBB794BB7, 0x544920AE,
561f89d2072SXin LI 	0xB206C41C, 0x5D36AF05, 0x698A64DF, 0x86BA0FC6, 0x00F3F36B, 0xEFC39872, 0xDB7F53A8, 0x344F38B1,
562f89d2072SXin LI 	0x97F8FAB0, 0x78C891A9, 0x4C745A73, 0xA344316A, 0x250DCDC7, 0xCA3DA6DE, 0xFE816D04, 0x11B1061D,
563f89d2072SXin LI 	0xF7FEE2AF, 0x18CE89B6, 0x2C72426C, 0xC3422975, 0x450BD5D8, 0xAA3BBEC1, 0x9E87751B, 0x71B71E02,
564f89d2072SXin LI 	0x57F4CA8E, 0xB8C4A197, 0x8C786A4D, 0x63480154, 0xE501FDF9, 0x0A3196E0, 0x3E8D5D3A, 0xD1BD3623,
565f89d2072SXin LI 	0x37F2D291, 0xD8C2B988, 0xEC7E7252, 0x034E194B, 0x8507E5E6, 0x6A378EFF, 0x5E8B4525, 0xB1BB2E3C
566f89d2072SXin LI };
567f89d2072SXin LI 
568f89d2072SXin LI /*
569f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o72
570f89d2072SXin LI  */
571f89d2072SXin LI 
572f89d2072SXin LI /*
573f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
574f89d2072SXin LI  * following model parameters:
575f89d2072SXin LI  *
576f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
577f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
578f89d2072SXin LI  * Reflected Bits = ....................... TRUE
579f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
580f89d2072SXin LI  * Number of Slices = ..................... 8 slices
581f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
582f89d2072SXin LI  * Directory Name = ....................... .\
583f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
584f89d2072SXin LI  */
585f89d2072SXin LI 
586f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o80[256] =
587f89d2072SXin LI {
588f89d2072SXin LI 	0x00000000, 0x68032CC8, 0xD0065990, 0xB8057558, 0xA5E0C5D1, 0xCDE3E919, 0x75E69C41, 0x1DE5B089,
589f89d2072SXin LI 	0x4E2DFD53, 0x262ED19B, 0x9E2BA4C3, 0xF628880B, 0xEBCD3882, 0x83CE144A, 0x3BCB6112, 0x53C84DDA,
590f89d2072SXin LI 	0x9C5BFAA6, 0xF458D66E, 0x4C5DA336, 0x245E8FFE, 0x39BB3F77, 0x51B813BF, 0xE9BD66E7, 0x81BE4A2F,
591f89d2072SXin LI 	0xD27607F5, 0xBA752B3D, 0x02705E65, 0x6A7372AD, 0x7796C224, 0x1F95EEEC, 0xA7909BB4, 0xCF93B77C,
592f89d2072SXin LI 	0x3D5B83BD, 0x5558AF75, 0xED5DDA2D, 0x855EF6E5, 0x98BB466C, 0xF0B86AA4, 0x48BD1FFC, 0x20BE3334,
593f89d2072SXin LI 	0x73767EEE, 0x1B755226, 0xA370277E, 0xCB730BB6, 0xD696BB3F, 0xBE9597F7, 0x0690E2AF, 0x6E93CE67,
594f89d2072SXin LI 	0xA100791B, 0xC90355D3, 0x7106208B, 0x19050C43, 0x04E0BCCA, 0x6CE39002, 0xD4E6E55A, 0xBCE5C992,
595f89d2072SXin LI 	0xEF2D8448, 0x872EA880, 0x3F2BDDD8, 0x5728F110, 0x4ACD4199, 0x22CE6D51, 0x9ACB1809, 0xF2C834C1,
596f89d2072SXin LI 	0x7AB7077A, 0x12B42BB2, 0xAAB15EEA, 0xC2B27222, 0xDF57C2AB, 0xB754EE63, 0x0F519B3B, 0x6752B7F3,
597f89d2072SXin LI 	0x349AFA29, 0x5C99D6E1, 0xE49CA3B9, 0x8C9F8F71, 0x917A3FF8, 0xF9791330, 0x417C6668, 0x297F4AA0,
598f89d2072SXin LI 	0xE6ECFDDC, 0x8EEFD114, 0x36EAA44C, 0x5EE98884, 0x430C380D, 0x2B0F14C5, 0x930A619D, 0xFB094D55,
599f89d2072SXin LI 	0xA8C1008F, 0xC0C22C47, 0x78C7591F, 0x10C475D7, 0x0D21C55E, 0x6522E996, 0xDD279CCE, 0xB524B006,
600f89d2072SXin LI 	0x47EC84C7, 0x2FEFA80F, 0x97EADD57, 0xFFE9F19F, 0xE20C4116, 0x8A0F6DDE, 0x320A1886, 0x5A09344E,
601f89d2072SXin LI 	0x09C17994, 0x61C2555C, 0xD9C72004, 0xB1C40CCC, 0xAC21BC45, 0xC422908D, 0x7C27E5D5, 0x1424C91D,
602f89d2072SXin LI 	0xDBB77E61, 0xB3B452A9, 0x0BB127F1, 0x63B20B39, 0x7E57BBB0, 0x16549778, 0xAE51E220, 0xC652CEE8,
603f89d2072SXin LI 	0x959A8332, 0xFD99AFFA, 0x459CDAA2, 0x2D9FF66A, 0x307A46E3, 0x58796A2B, 0xE07C1F73, 0x887F33BB,
604f89d2072SXin LI 	0xF56E0EF4, 0x9D6D223C, 0x25685764, 0x4D6B7BAC, 0x508ECB25, 0x388DE7ED, 0x808892B5, 0xE88BBE7D,
605f89d2072SXin LI 	0xBB43F3A7, 0xD340DF6F, 0x6B45AA37, 0x034686FF, 0x1EA33676, 0x76A01ABE, 0xCEA56FE6, 0xA6A6432E,
606f89d2072SXin LI 	0x6935F452, 0x0136D89A, 0xB933ADC2, 0xD130810A, 0xCCD53183, 0xA4D61D4B, 0x1CD36813, 0x74D044DB,
607f89d2072SXin LI 	0x27180901, 0x4F1B25C9, 0xF71E5091, 0x9F1D7C59, 0x82F8CCD0, 0xEAFBE018, 0x52FE9540, 0x3AFDB988,
608f89d2072SXin LI 	0xC8358D49, 0xA036A181, 0x1833D4D9, 0x7030F811, 0x6DD54898, 0x05D66450, 0xBDD31108, 0xD5D03DC0,
609f89d2072SXin LI 	0x8618701A, 0xEE1B5CD2, 0x561E298A, 0x3E1D0542, 0x23F8B5CB, 0x4BFB9903, 0xF3FEEC5B, 0x9BFDC093,
610f89d2072SXin LI 	0x546E77EF, 0x3C6D5B27, 0x84682E7F, 0xEC6B02B7, 0xF18EB23E, 0x998D9EF6, 0x2188EBAE, 0x498BC766,
611f89d2072SXin LI 	0x1A438ABC, 0x7240A674, 0xCA45D32C, 0xA246FFE4, 0xBFA34F6D, 0xD7A063A5, 0x6FA516FD, 0x07A63A35,
612f89d2072SXin LI 	0x8FD9098E, 0xE7DA2546, 0x5FDF501E, 0x37DC7CD6, 0x2A39CC5F, 0x423AE097, 0xFA3F95CF, 0x923CB907,
613f89d2072SXin LI 	0xC1F4F4DD, 0xA9F7D815, 0x11F2AD4D, 0x79F18185, 0x6414310C, 0x0C171DC4, 0xB412689C, 0xDC114454,
614f89d2072SXin LI 	0x1382F328, 0x7B81DFE0, 0xC384AAB8, 0xAB878670, 0xB66236F9, 0xDE611A31, 0x66646F69, 0x0E6743A1,
615f89d2072SXin LI 	0x5DAF0E7B, 0x35AC22B3, 0x8DA957EB, 0xE5AA7B23, 0xF84FCBAA, 0x904CE762, 0x2849923A, 0x404ABEF2,
616f89d2072SXin LI 	0xB2828A33, 0xDA81A6FB, 0x6284D3A3, 0x0A87FF6B, 0x17624FE2, 0x7F61632A, 0xC7641672, 0xAF673ABA,
617f89d2072SXin LI 	0xFCAF7760, 0x94AC5BA8, 0x2CA92EF0, 0x44AA0238, 0x594FB2B1, 0x314C9E79, 0x8949EB21, 0xE14AC7E9,
618f89d2072SXin LI 	0x2ED97095, 0x46DA5C5D, 0xFEDF2905, 0x96DC05CD, 0x8B39B544, 0xE33A998C, 0x5B3FECD4, 0x333CC01C,
619f89d2072SXin LI 	0x60F48DC6, 0x08F7A10E, 0xB0F2D456, 0xD8F1F89E, 0xC5144817, 0xAD1764DF, 0x15121187, 0x7D113D4F
620f89d2072SXin LI };
621f89d2072SXin LI 
622f89d2072SXin LI /*
623f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o80
624f89d2072SXin LI  */
625f89d2072SXin LI 
626f89d2072SXin LI /*
627f89d2072SXin LI  * The following CRC lookup table was generated automagically using the
628f89d2072SXin LI  * following model parameters:
629f89d2072SXin LI  *
630f89d2072SXin LI  * Generator Polynomial = ................. 0x1EDC6F41
631f89d2072SXin LI  * Generator Polynomial Length = .......... 32 bits
632f89d2072SXin LI  * Reflected Bits = ....................... TRUE
633f89d2072SXin LI  * Table Generation Offset = .............. 32 bits
634f89d2072SXin LI  * Number of Slices = ..................... 8 slices
635f89d2072SXin LI  * Slice Lengths = ........................ 8 8 8 8 8 8 8 8
636f89d2072SXin LI  * Directory Name = ....................... .\
637f89d2072SXin LI  * File Name = ............................ 8x256_tables.c
638f89d2072SXin LI  */
639f89d2072SXin LI 
640f89d2072SXin LI static const uint32_t sctp_crc_tableil8_o88[256] =
641f89d2072SXin LI {
642f89d2072SXin LI 	0x00000000, 0x493C7D27, 0x9278FA4E, 0xDB448769, 0x211D826D, 0x6821FF4A, 0xB3657823, 0xFA590504,
643f89d2072SXin LI 	0x423B04DA, 0x0B0779FD, 0xD043FE94, 0x997F83B3, 0x632686B7, 0x2A1AFB90, 0xF15E7CF9, 0xB86201DE,
644f89d2072SXin LI 	0x847609B4, 0xCD4A7493, 0x160EF3FA, 0x5F328EDD, 0xA56B8BD9, 0xEC57F6FE, 0x37137197, 0x7E2F0CB0,
645f89d2072SXin LI 	0xC64D0D6E, 0x8F717049, 0x5435F720, 0x1D098A07, 0xE7508F03, 0xAE6CF224, 0x7528754D, 0x3C14086A,
646f89d2072SXin LI 	0x0D006599, 0x443C18BE, 0x9F789FD7, 0xD644E2F0, 0x2C1DE7F4, 0x65219AD3, 0xBE651DBA, 0xF759609D,
647f89d2072SXin LI 	0x4F3B6143, 0x06071C64, 0xDD439B0D, 0x947FE62A, 0x6E26E32E, 0x271A9E09, 0xFC5E1960, 0xB5626447,
648f89d2072SXin LI 	0x89766C2D, 0xC04A110A, 0x1B0E9663, 0x5232EB44, 0xA86BEE40, 0xE1579367, 0x3A13140E, 0x732F6929,
649f89d2072SXin LI 	0xCB4D68F7, 0x827115D0, 0x593592B9, 0x1009EF9E, 0xEA50EA9A, 0xA36C97BD, 0x782810D4, 0x31146DF3,
650f89d2072SXin LI 	0x1A00CB32, 0x533CB615, 0x8878317C, 0xC1444C5B, 0x3B1D495F, 0x72213478, 0xA965B311, 0xE059CE36,
651f89d2072SXin LI 	0x583BCFE8, 0x1107B2CF, 0xCA4335A6, 0x837F4881, 0x79264D85, 0x301A30A2, 0xEB5EB7CB, 0xA262CAEC,
652f89d2072SXin LI 	0x9E76C286, 0xD74ABFA1, 0x0C0E38C8, 0x453245EF, 0xBF6B40EB, 0xF6573DCC, 0x2D13BAA5, 0x642FC782,
653f89d2072SXin LI 	0xDC4DC65C, 0x9571BB7B, 0x4E353C12, 0x07094135, 0xFD504431, 0xB46C3916, 0x6F28BE7F, 0x2614C358,
654f89d2072SXin LI 	0x1700AEAB, 0x5E3CD38C, 0x857854E5, 0xCC4429C2, 0x361D2CC6, 0x7F2151E1, 0xA465D688, 0xED59ABAF,
655f89d2072SXin LI 	0x553BAA71, 0x1C07D756, 0xC743503F, 0x8E7F2D18, 0x7426281C, 0x3D1A553B, 0xE65ED252, 0xAF62AF75,
656f89d2072SXin LI 	0x9376A71F, 0xDA4ADA38, 0x010E5D51, 0x48322076, 0xB26B2572, 0xFB575855, 0x2013DF3C, 0x692FA21B,
657f89d2072SXin LI 	0xD14DA3C5, 0x9871DEE2, 0x4335598B, 0x0A0924AC, 0xF05021A8, 0xB96C5C8F, 0x6228DBE6, 0x2B14A6C1,
658f89d2072SXin LI 	0x34019664, 0x7D3DEB43, 0xA6796C2A, 0xEF45110D, 0x151C1409, 0x5C20692E, 0x8764EE47, 0xCE589360,
659f89d2072SXin LI 	0x763A92BE, 0x3F06EF99, 0xE44268F0, 0xAD7E15D7, 0x572710D3, 0x1E1B6DF4, 0xC55FEA9D, 0x8C6397BA,
660f89d2072SXin LI 	0xB0779FD0, 0xF94BE2F7, 0x220F659E, 0x6B3318B9, 0x916A1DBD, 0xD856609A, 0x0312E7F3, 0x4A2E9AD4,
661f89d2072SXin LI 	0xF24C9B0A, 0xBB70E62D, 0x60346144, 0x29081C63, 0xD3511967, 0x9A6D6440, 0x4129E329, 0x08159E0E,
662f89d2072SXin LI 	0x3901F3FD, 0x703D8EDA, 0xAB7909B3, 0xE2457494, 0x181C7190, 0x51200CB7, 0x8A648BDE, 0xC358F6F9,
663f89d2072SXin LI 	0x7B3AF727, 0x32068A00, 0xE9420D69, 0xA07E704E, 0x5A27754A, 0x131B086D, 0xC85F8F04, 0x8163F223,
664f89d2072SXin LI 	0xBD77FA49, 0xF44B876E, 0x2F0F0007, 0x66337D20, 0x9C6A7824, 0xD5560503, 0x0E12826A, 0x472EFF4D,
665f89d2072SXin LI 	0xFF4CFE93, 0xB67083B4, 0x6D3404DD, 0x240879FA, 0xDE517CFE, 0x976D01D9, 0x4C2986B0, 0x0515FB97,
666f89d2072SXin LI 	0x2E015D56, 0x673D2071, 0xBC79A718, 0xF545DA3F, 0x0F1CDF3B, 0x4620A21C, 0x9D642575, 0xD4585852,
667f89d2072SXin LI 	0x6C3A598C, 0x250624AB, 0xFE42A3C2, 0xB77EDEE5, 0x4D27DBE1, 0x041BA6C6, 0xDF5F21AF, 0x96635C88,
668f89d2072SXin LI 	0xAA7754E2, 0xE34B29C5, 0x380FAEAC, 0x7133D38B, 0x8B6AD68F, 0xC256ABA8, 0x19122CC1, 0x502E51E6,
669f89d2072SXin LI 	0xE84C5038, 0xA1702D1F, 0x7A34AA76, 0x3308D751, 0xC951D255, 0x806DAF72, 0x5B29281B, 0x1215553C,
670f89d2072SXin LI 	0x230138CF, 0x6A3D45E8, 0xB179C281, 0xF845BFA6, 0x021CBAA2, 0x4B20C785, 0x906440EC, 0xD9583DCB,
671f89d2072SXin LI 	0x613A3C15, 0x28064132, 0xF342C65B, 0xBA7EBB7C, 0x4027BE78, 0x091BC35F, 0xD25F4436, 0x9B633911,
672f89d2072SXin LI 	0xA777317B, 0xEE4B4C5C, 0x350FCB35, 0x7C33B612, 0x866AB316, 0xCF56CE31, 0x14124958, 0x5D2E347F,
673f89d2072SXin LI 	0xE54C35A1, 0xAC704886, 0x7734CFEF, 0x3E08B2C8, 0xC451B7CC, 0x8D6DCAEB, 0x56294D82, 0x1F1530A5
674f89d2072SXin LI };
675f89d2072SXin LI 
676f89d2072SXin LI /*
677f89d2072SXin LI  * end of the CRC lookup table crc_tableil8_o88
678f89d2072SXin LI  */
679f89d2072SXin LI 
680f89d2072SXin LI static uint32_t
crc32c_sb8_64_bit(uint32_t crc,const unsigned char * p_buf,uint32_t length,uint32_t init_bytes)681f89d2072SXin LI crc32c_sb8_64_bit(uint32_t crc,
682f89d2072SXin LI     const unsigned char *p_buf,
683f89d2072SXin LI     uint32_t length,
684f89d2072SXin LI     uint32_t init_bytes)
685f89d2072SXin LI {
686f89d2072SXin LI 	uint32_t li;
687f89d2072SXin LI 	uint32_t term1, term2;
688f89d2072SXin LI 	uint32_t running_length;
689f89d2072SXin LI 	uint32_t end_bytes;
690f89d2072SXin LI 
691f89d2072SXin LI 	running_length = rounddown(length - init_bytes, 8);
692f89d2072SXin LI 	end_bytes = length - init_bytes - running_length;
693f89d2072SXin LI 
694f89d2072SXin LI 	for (li = 0; li < init_bytes; li++)
695f89d2072SXin LI 		crc = sctp_crc_tableil8_o32[(crc ^ *p_buf++) & 0x000000FF] ^
696f89d2072SXin LI 		    (crc >> 8);
697f89d2072SXin LI 	for (li = 0; li < running_length / 8; li++) {
698f89d2072SXin LI #if BYTE_ORDER == BIG_ENDIAN
699f89d2072SXin LI 		crc ^= *p_buf++;
700f89d2072SXin LI 		crc ^= (*p_buf++) << 8;
701f89d2072SXin LI 		crc ^= (*p_buf++) << 16;
702f89d2072SXin LI 		crc ^= (*p_buf++) << 24;
703f89d2072SXin LI #else
704f89d2072SXin LI 		crc ^= *(const uint32_t *) p_buf;
705f89d2072SXin LI 		p_buf += 4;
706f89d2072SXin LI #endif
707f89d2072SXin LI 		term1 = sctp_crc_tableil8_o88[crc & 0x000000FF] ^
708f89d2072SXin LI 		    sctp_crc_tableil8_o80[(crc >> 8) & 0x000000FF];
709f89d2072SXin LI 		term2 = crc >> 16;
710f89d2072SXin LI 		crc = term1 ^
711f89d2072SXin LI 		    sctp_crc_tableil8_o72[term2 & 0x000000FF] ^
712f89d2072SXin LI 		    sctp_crc_tableil8_o64[(term2 >> 8) & 0x000000FF];
713f89d2072SXin LI 
714f89d2072SXin LI #if BYTE_ORDER == BIG_ENDIAN
715f89d2072SXin LI 		crc ^= sctp_crc_tableil8_o56[*p_buf++];
716f89d2072SXin LI 		crc ^= sctp_crc_tableil8_o48[*p_buf++];
717f89d2072SXin LI 		crc ^= sctp_crc_tableil8_o40[*p_buf++];
718f89d2072SXin LI 		crc ^= sctp_crc_tableil8_o32[*p_buf++];
719f89d2072SXin LI #else
720f89d2072SXin LI 		term1 = sctp_crc_tableil8_o56[(*(const uint32_t *) p_buf) & 0x000000FF] ^
721f89d2072SXin LI 		    sctp_crc_tableil8_o48[((*(const uint32_t *) p_buf) >> 8) & 0x000000FF];
722f89d2072SXin LI 
723f89d2072SXin LI 		term2 = (*(const uint32_t *) p_buf) >> 16;
724f89d2072SXin LI 		crc = crc ^
725f89d2072SXin LI 		    term1 ^
726f89d2072SXin LI 		    sctp_crc_tableil8_o40[term2 & 0x000000FF] ^
727f89d2072SXin LI 		    sctp_crc_tableil8_o32[(term2 >> 8) & 0x000000FF];
728f89d2072SXin LI 		p_buf += 4;
729f89d2072SXin LI #endif
730f89d2072SXin LI 	}
731f89d2072SXin LI 	for (li = 0; li < end_bytes; li++)
732f89d2072SXin LI 		crc = sctp_crc_tableil8_o32[(crc ^ *p_buf++) & 0x000000FF] ^
733f89d2072SXin LI 		    (crc >> 8);
734f89d2072SXin LI 	return crc;
735f89d2072SXin LI }
736f89d2072SXin LI 
73783c20b8aSAlex Richardson #ifndef TESTING
73883c20b8aSAlex Richardson static
73983c20b8aSAlex Richardson #endif
74083c20b8aSAlex Richardson uint32_t
multitable_crc32c(uint32_t crc32c,const void * buffer,size_t length)741f89d2072SXin LI multitable_crc32c(uint32_t crc32c,
74283c20b8aSAlex Richardson     const void *buffer,
74383c20b8aSAlex Richardson     size_t length)
744f89d2072SXin LI {
745f89d2072SXin LI 	uint32_t to_even_word;
746f89d2072SXin LI 
747f89d2072SXin LI 	if (length == 0) {
748f89d2072SXin LI 		return (crc32c);
749f89d2072SXin LI 	}
750f89d2072SXin LI 	to_even_word = (4 - (((uintptr_t) buffer) & 0x3));
751f89d2072SXin LI 	return (crc32c_sb8_64_bit(crc32c, buffer, length, to_even_word));
752f89d2072SXin LI }
753f89d2072SXin LI 
754a93941b4SAndrew Turner static uint32_t
table_crc32c(uint32_t crc32c,const unsigned char * buffer,unsigned int length)755a93941b4SAndrew Turner table_crc32c(uint32_t crc32c, const unsigned char *buffer, unsigned int length)
756f89d2072SXin LI {
757f89d2072SXin LI 	if (length < 4) {
758f89d2072SXin LI 		return (singletable_crc32c(crc32c, buffer, length));
759f89d2072SXin LI 	} else {
760f89d2072SXin LI 		return (multitable_crc32c(crc32c, buffer, length));
761f89d2072SXin LI 	}
762f89d2072SXin LI }
763a93941b4SAndrew Turner 
764a93941b4SAndrew Turner #if defined(_KERNEL) && defined(__aarch64__)
765a93941b4SAndrew Turner DEFINE_IFUNC(, uint32_t, calculate_crc32c,
766a93941b4SAndrew Turner     (uint32_t crc32c, const unsigned char *buffer, unsigned int length))
767a93941b4SAndrew Turner {
768a93941b4SAndrew Turner 	uint64_t reg;
769a93941b4SAndrew Turner 
770a93941b4SAndrew Turner 	if (get_kernel_reg(ID_AA64ISAR0_EL1, &reg)) {
771a93941b4SAndrew Turner 		if (ID_AA64ISAR0_CRC32_VAL(reg) >= ID_AA64ISAR0_CRC32_BASE)
772a93941b4SAndrew Turner 			return (armv8_crc32c);
773a93941b4SAndrew Turner 	}
774a93941b4SAndrew Turner 
775a93941b4SAndrew Turner 	return (table_crc32c);
776a93941b4SAndrew Turner }
777a93941b4SAndrew Turner #elif defined(_KERNEL) && (defined(__amd64__) || defined(__i386__))
778a93941b4SAndrew Turner DEFINE_IFUNC(, uint32_t, calculate_crc32c,
779a93941b4SAndrew Turner     (uint32_t crc32c, const unsigned char *buffer, unsigned int length))
780a93941b4SAndrew Turner {
781a93941b4SAndrew Turner 	if ((cpu_feature2 & CPUID2_SSE42) != 0)
782a93941b4SAndrew Turner 		return (sse42_crc32c);
783a93941b4SAndrew Turner 
784a93941b4SAndrew Turner 	return (table_crc32c);
785a93941b4SAndrew Turner }
786a93941b4SAndrew Turner #else
787a93941b4SAndrew Turner uint32_t
calculate_crc32c(uint32_t crc32c,const unsigned char * buffer,unsigned int length)788a93941b4SAndrew Turner calculate_crc32c(uint32_t crc32c,
789a93941b4SAndrew Turner     const unsigned char *buffer,
790a93941b4SAndrew Turner     unsigned int length)
791a93941b4SAndrew Turner {
792a93941b4SAndrew Turner 	return (table_crc32c(crc32c, buffer, length));
793a93941b4SAndrew Turner }
794a93941b4SAndrew Turner #endif /* _KERNEL && __aarch64__ */
795a93941b4SAndrew Turner 
796cffca129SWarner Losh #else
797cffca129SWarner Losh uint32_t
calculate_crc32c(uint32_t crc32c,const unsigned char * buffer,unsigned int length)798cffca129SWarner Losh calculate_crc32c(uint32_t crc32c, const unsigned char *buffer, unsigned int length)
799cffca129SWarner Losh {
800cffca129SWarner Losh 	return (singletable_crc32c(crc32c, buffer, length));
801cffca129SWarner Losh }
802cffca129SWarner Losh #endif
803