1 | /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ |
2 | /* Copyright (C) 2015-2017 Netronome Systems, Inc. */ |
3 | |
4 | #ifndef NFP_CRC32_H |
5 | #define NFP_CRC32_H |
6 | |
7 | #include <linux/crc32.h> |
8 | |
9 | /** |
10 | * crc32_posix_end() - Finalize POSIX CRC32 working state |
11 | * @crc: Current CRC32 working state |
12 | * @total_len: Total length of data that was CRC32'd |
13 | * |
14 | * Return: Final POSIX CRC32 value |
15 | */ |
16 | static inline u32 crc32_posix_end(u32 crc, size_t total_len) |
17 | { |
18 | /* Extend with the length of the string. */ |
19 | while (total_len != 0) { |
20 | u8 c = total_len & 0xff; |
21 | |
22 | crc = crc32_be(crc, p: &c, len: 1); |
23 | total_len >>= 8; |
24 | } |
25 | |
26 | return ~crc; |
27 | } |
28 | |
29 | static inline u32 crc32_posix(const void *buff, size_t len) |
30 | { |
31 | return crc32_posix_end(crc: crc32_be(crc: 0, p: buff, len), total_len: len); |
32 | } |
33 | |
34 | #endif /* NFP_CRC32_H */ |
35 | |