]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
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> | |
906d66df | 9 | #include <linux/bitrev.h> |
1da177e4 | 10 | |
d8f1c477 GS |
11 | u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len); |
12 | u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len); | |
1da177e4 | 13 | |
6e95fcaa DB |
14 | /** |
15 | * crc32_le_combine - Combine two crc32 check values into one. For two | |
16 | * sequences of bytes, seq1 and seq2 with lengths len1 | |
17 | * and len2, crc32_le() check values were calculated | |
18 | * for each, crc1 and crc2. | |
19 | * | |
20 | * @crc1: crc32 of the first block | |
21 | * @crc2: crc32 of the second block | |
22 | * @len2: length of the second block | |
23 | * | |
24 | * Return: The crc32_le() check value of seq1 and seq2 concatenated, | |
25 | * requiring only crc1, crc2, and len2. Note: If seq_full denotes | |
26 | * the concatenated memory area of seq1 with seq2, and crc_full | |
27 | * the crc32_le() value of seq_full, then crc_full == | |
28 | * crc32_le_combine(crc1, crc2, len2) when crc_full was seeded | |
29 | * with the same initializer as crc1, and crc2 seed was 0. See | |
30 | * also crc32_combine_test(). | |
31 | */ | |
6d514b4e GS |
32 | u32 __attribute_const__ crc32_le_shift(u32 crc, size_t len); |
33 | ||
34 | static inline u32 crc32_le_combine(u32 crc1, u32 crc2, size_t len2) | |
35 | { | |
36 | return crc32_le_shift(crc1, len2) ^ crc2; | |
37 | } | |
6e95fcaa | 38 | |
d8f1c477 | 39 | u32 __pure __crc32c_le(u32 crc, unsigned char const *p, size_t len); |
46c5801e | 40 | |
6e95fcaa DB |
41 | /** |
42 | * __crc32c_le_combine - Combine two crc32c check values into one. For two | |
43 | * sequences of bytes, seq1 and seq2 with lengths len1 | |
44 | * and len2, __crc32c_le() check values were calculated | |
45 | * for each, crc1 and crc2. | |
46 | * | |
47 | * @crc1: crc32c of the first block | |
48 | * @crc2: crc32c of the second block | |
49 | * @len2: length of the second block | |
50 | * | |
51 | * Return: The __crc32c_le() check value of seq1 and seq2 concatenated, | |
52 | * requiring only crc1, crc2, and len2. Note: If seq_full denotes | |
53 | * the concatenated memory area of seq1 with seq2, and crc_full | |
54 | * the __crc32c_le() value of seq_full, then crc_full == | |
55 | * __crc32c_le_combine(crc1, crc2, len2) when crc_full was | |
56 | * seeded with the same initializer as crc1, and crc2 seed | |
57 | * was 0. See also crc32c_combine_test(). | |
58 | */ | |
6d514b4e GS |
59 | u32 __attribute_const__ __crc32c_le_shift(u32 crc, size_t len); |
60 | ||
61 | static inline u32 __crc32c_le_combine(u32 crc1, u32 crc2, size_t len2) | |
62 | { | |
63 | return __crc32c_le_shift(crc1, len2) ^ crc2; | |
64 | } | |
6e95fcaa | 65 | |
d03e1617 | 66 | #define crc32(seed, data, length) crc32_le(seed, (unsigned char const *)(data), length) |
1da177e4 LT |
67 | |
68 | /* | |
69 | * Helpers for hash table generation of ethernet nics: | |
70 | * | |
71 | * Ethernet sends the least significant bit of a byte first, thus crc32_le | |
72 | * is used. The output of crc32_le is bit reversed [most significant bit | |
73 | * is in bit nr 0], thus it must be reversed before use. Except for | |
74 | * nics that bit swap the result internally... | |
75 | */ | |
906d66df | 76 | #define ether_crc(length, data) bitrev32(crc32_le(~0, data, length)) |
1da177e4 LT |
77 | #define ether_crc_le(length, data) crc32_le(~0, data, length) |
78 | ||
79 | #endif /* _LINUX_CRC32_H */ |