1b56a8975SPeter Spreadborough /* SPDX-License-Identifier: BSD-3-Clause
2b56a8975SPeter Spreadborough * Copyright(c) 2021 Broadcom
3b56a8975SPeter Spreadborough * All rights reserved.
4b56a8975SPeter Spreadborough */
5b56a8975SPeter Spreadborough
6*08e1af1aSFarah Smith #include "hcapi_cfa.h"
7b56a8975SPeter Spreadborough
8b56a8975SPeter Spreadborough const uint32_t crc32tbl[] = { /* CRC polynomial 0xedb88320 */
9b56a8975SPeter Spreadborough 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
10b56a8975SPeter Spreadborough 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
11b56a8975SPeter Spreadborough 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
12b56a8975SPeter Spreadborough 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
13b56a8975SPeter Spreadborough 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
14b56a8975SPeter Spreadborough 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
15b56a8975SPeter Spreadborough 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
16b56a8975SPeter Spreadborough 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
17b56a8975SPeter Spreadborough 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
18b56a8975SPeter Spreadborough 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
19b56a8975SPeter Spreadborough 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
20b56a8975SPeter Spreadborough 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
21b56a8975SPeter Spreadborough 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
22b56a8975SPeter Spreadborough 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
23b56a8975SPeter Spreadborough 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
24b56a8975SPeter Spreadborough 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
25b56a8975SPeter Spreadborough 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
26b56a8975SPeter Spreadborough 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
27b56a8975SPeter Spreadborough 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
28b56a8975SPeter Spreadborough 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
29b56a8975SPeter Spreadborough 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
30b56a8975SPeter Spreadborough 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
31b56a8975SPeter Spreadborough 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
32b56a8975SPeter Spreadborough 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
33b56a8975SPeter Spreadborough 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
34b56a8975SPeter Spreadborough 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
35b56a8975SPeter Spreadborough 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
36b56a8975SPeter Spreadborough 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
37b56a8975SPeter Spreadborough 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
38b56a8975SPeter Spreadborough 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
39b56a8975SPeter Spreadborough 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
40b56a8975SPeter Spreadborough 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
41b56a8975SPeter Spreadborough 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
42b56a8975SPeter Spreadborough 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
43b56a8975SPeter Spreadborough 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
44b56a8975SPeter Spreadborough 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
45b56a8975SPeter Spreadborough 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
46b56a8975SPeter Spreadborough 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
47b56a8975SPeter Spreadborough 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
48b56a8975SPeter Spreadborough 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
49b56a8975SPeter Spreadborough 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
50b56a8975SPeter Spreadborough 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
51b56a8975SPeter Spreadborough 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
52b56a8975SPeter Spreadborough 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
53b56a8975SPeter Spreadborough 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
54b56a8975SPeter Spreadborough 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
55b56a8975SPeter Spreadborough 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
56b56a8975SPeter Spreadborough 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
57b56a8975SPeter Spreadborough 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
58b56a8975SPeter Spreadborough 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
59b56a8975SPeter Spreadborough 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
60b56a8975SPeter Spreadborough 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
61b56a8975SPeter Spreadborough 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
62b56a8975SPeter Spreadborough 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
63b56a8975SPeter Spreadborough 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
64b56a8975SPeter Spreadborough 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
65b56a8975SPeter Spreadborough 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
66b56a8975SPeter Spreadborough 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
67b56a8975SPeter Spreadborough 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
68b56a8975SPeter Spreadborough 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
69b56a8975SPeter Spreadborough 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
70b56a8975SPeter Spreadborough 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
71b56a8975SPeter Spreadborough 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
72b56a8975SPeter Spreadborough 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
73b56a8975SPeter Spreadborough };
74b56a8975SPeter Spreadborough
hcapi_cfa_crc32i(uint32_t crc,const uint8_t * buf,size_t len)75b56a8975SPeter Spreadborough uint32_t hcapi_cfa_crc32i(uint32_t crc, const uint8_t *buf, size_t len)
76b56a8975SPeter Spreadborough {
77b56a8975SPeter Spreadborough int l;
78b56a8975SPeter Spreadborough
79b56a8975SPeter Spreadborough for (l = (len - 1); l >= 0; l--)
80b56a8975SPeter Spreadborough crc = ucrc32(buf[l], crc);
81b56a8975SPeter Spreadborough
82b56a8975SPeter Spreadborough return ~crc;
83b56a8975SPeter Spreadborough }
84