blob: 68267b64bb983cd103a34f499f6474ef5c4ef2e3 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * crc32.h
3 * See linux/lib/crc32.c for license and changes
4 */
5#ifndef _LINUX_CRC32_H
6#define _LINUX_CRC32_H
7
8#include <linux/types.h>
Akinobu Mita906d66d2006-12-08 02:36:25 -08009#include <linux/bitrev.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070010
11extern u32 crc32_le(u32 crc, unsigned char const *p, size_t len);
12extern u32 crc32_be(u32 crc, unsigned char const *p, size_t len);
Linus Torvalds1da177e2005-04-16 15:20:36 -070013
Darrick J. Wong46c58012012-03-23 15:02:25 -070014extern u32 __crc32c_le(u32 crc, unsigned char const *p, size_t len);
15
Konstantin Khlebnikovd03e1612011-03-22 16:34:45 -070016#define crc32(seed, data, length) crc32_le(seed, (unsigned char const *)(data), length)
Linus Torvalds1da177e2005-04-16 15:20:36 -070017
18/*
19 * Helpers for hash table generation of ethernet nics:
20 *
21 * Ethernet sends the least significant bit of a byte first, thus crc32_le
22 * is used. The output of crc32_le is bit reversed [most significant bit
23 * is in bit nr 0], thus it must be reversed before use. Except for
24 * nics that bit swap the result internally...
25 */
Akinobu Mita906d66d2006-12-08 02:36:25 -080026#define ether_crc(length, data) bitrev32(crc32_le(~0, data, length))
Linus Torvalds1da177e2005-04-16 15:20:36 -070027#define ether_crc_le(length, data) crc32_le(~0, data, length)
28
29#endif /* _LINUX_CRC32_H */