xref: /rk3399_rockchip-uboot/include/linux/crc32.h (revision 7e6ee7ad27de5216db1baef76f38c3429c8f4a2a)
1*7e6ee7adSKyungmin Park /*
2*7e6ee7adSKyungmin Park  * crc32.h
3*7e6ee7adSKyungmin Park  * See linux/lib/crc32.c for license and changes
4*7e6ee7adSKyungmin Park  */
5*7e6ee7adSKyungmin Park #ifndef _LINUX_CRC32_H
6*7e6ee7adSKyungmin Park #define _LINUX_CRC32_H
7*7e6ee7adSKyungmin Park 
8*7e6ee7adSKyungmin Park #include <linux/types.h>
9*7e6ee7adSKyungmin Park //#include <linux/bitrev.h>
10*7e6ee7adSKyungmin Park 
11*7e6ee7adSKyungmin Park extern u32  crc32_le(u32 crc, unsigned char const *p, size_t len);
12*7e6ee7adSKyungmin Park //extern u32  crc32_be(u32 crc, unsigned char const *p, size_t len);
13*7e6ee7adSKyungmin Park 
14*7e6ee7adSKyungmin Park #define crc32(seed, data, length)  crc32_le(seed, (unsigned char const *)data, length)
15*7e6ee7adSKyungmin Park 
16*7e6ee7adSKyungmin Park /*
17*7e6ee7adSKyungmin Park  * Helpers for hash table generation of ethernet nics:
18*7e6ee7adSKyungmin Park  *
19*7e6ee7adSKyungmin Park  * Ethernet sends the least significant bit of a byte first, thus crc32_le
20*7e6ee7adSKyungmin Park  * is used. The output of crc32_le is bit reversed [most significant bit
21*7e6ee7adSKyungmin Park  * is in bit nr 0], thus it must be reversed before use. Except for
22*7e6ee7adSKyungmin Park  * nics that bit swap the result internally...
23*7e6ee7adSKyungmin Park  */
24*7e6ee7adSKyungmin Park //#define ether_crc(length, data)    bitrev32(crc32_le(~0, data, length))
25*7e6ee7adSKyungmin Park //#define ether_crc_le(length, data) crc32_le(~0, data, length)
26*7e6ee7adSKyungmin Park 
27*7e6ee7adSKyungmin Park #endif /* _LINUX_CRC32_H */
28