xref: /openbmc/u-boot/include/linux/crc32.h (revision ef29884b2708a6cce3b77f4ccaeea193d4e02c22)
17e6ee7adSKyungmin Park /*
27e6ee7adSKyungmin Park  * crc32.h
37e6ee7adSKyungmin Park  * See linux/lib/crc32.c for license and changes
47e6ee7adSKyungmin Park  */
57e6ee7adSKyungmin Park #ifndef _LINUX_CRC32_H
67e6ee7adSKyungmin Park #define _LINUX_CRC32_H
77e6ee7adSKyungmin Park 
87e6ee7adSKyungmin Park #include <linux/types.h>
9*455ae7e8SWolfgang Denk /* #include <linux/bitrev.h> */
107e6ee7adSKyungmin Park 
117e6ee7adSKyungmin Park extern u32  crc32_le(u32 crc, unsigned char const *p, size_t len);
12*455ae7e8SWolfgang Denk /* extern u32  crc32_be(u32 crc, unsigned char const *p, size_t len); */
137e6ee7adSKyungmin Park 
147e6ee7adSKyungmin Park #define crc32(seed, data, length)  crc32_le(seed, (unsigned char const *)data, length)
157e6ee7adSKyungmin Park 
167e6ee7adSKyungmin Park /*
177e6ee7adSKyungmin Park  * Helpers for hash table generation of ethernet nics:
187e6ee7adSKyungmin Park  *
197e6ee7adSKyungmin Park  * Ethernet sends the least significant bit of a byte first, thus crc32_le
207e6ee7adSKyungmin Park  * is used. The output of crc32_le is bit reversed [most significant bit
217e6ee7adSKyungmin Park  * is in bit nr 0], thus it must be reversed before use. Except for
227e6ee7adSKyungmin Park  * nics that bit swap the result internally...
237e6ee7adSKyungmin Park  */
24*455ae7e8SWolfgang Denk /* #define ether_crc(length, data)    bitrev32(crc32_le(~0, data, length)) */
25*455ae7e8SWolfgang Denk /* #define ether_crc_le(length, data) crc32_le(~0, data, length) */
267e6ee7adSKyungmin Park 
277e6ee7adSKyungmin Park #endif /* _LINUX_CRC32_H */
28