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