Tom Rini | 10e4779 | 2018-05-06 17:58:06 -0400 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
Prafulla Wadaskar | 4d4d67d | 2009-08-16 05:28:19 +0530 | [diff] [blame] | 2 | /* |
| 3 | * (C) Copyright 2009 |
| 4 | * Marvell Semiconductor <www.marvell.com> |
| 5 | * Written-by: Prafulla Wadaskar <prafulla@marvell.com> |
Prafulla Wadaskar | 4d4d67d | 2009-08-16 05:28:19 +0530 | [diff] [blame] | 6 | */ |
| 7 | |
| 8 | #ifndef _UBOOT_CRC_H |
| 9 | #define _UBOOT_CRC_H |
| 10 | |
Simon Glass | ca9b0af | 2019-11-14 12:57:14 -0700 | [diff] [blame^] | 11 | /** |
| 12 | * crc8() - Calculate and return CRC-8 of the data |
| 13 | * |
| 14 | * This uses an x^8 + x^2 + x + 1 polynomial. A table-based algorithm would |
| 15 | * be faster, but for only a few bytes it isn't worth the code size |
| 16 | * |
| 17 | * lib/crc8.c |
| 18 | * |
| 19 | * @crc_start: CRC8 start value |
| 20 | * @vptr: Buffer to checksum |
| 21 | * @len: Length of buffer in bytes |
| 22 | * @return CRC8 checksum |
| 23 | */ |
oliver@schinagl.nl | 3255e9f | 2016-11-25 16:30:31 +0100 | [diff] [blame] | 24 | unsigned int crc8(unsigned int crc_start, const unsigned char *vptr, int len); |
| 25 | |
Philipp Tomsich | 36b26d1 | 2018-11-25 19:22:18 +0100 | [diff] [blame] | 26 | /* lib/crc16.c - 16 bit CRC with polynomial x^16+x^12+x^5+1 (CRC-CCITT) */ |
| 27 | uint16_t crc16_ccitt(uint16_t crc_start, const unsigned char *s, int len); |
Philipp Tomsich | 6e2ac3e | 2018-11-25 19:22:19 +0100 | [diff] [blame] | 28 | /** |
| 29 | * crc16_ccitt_wd_buf - Perform CRC16-CCIT on an input buffer and return the |
| 30 | * 16-bit result (network byte-order) in an output buffer |
| 31 | * |
| 32 | * @in: input buffer |
| 33 | * @len: input buffer length |
| 34 | * @out: output buffer (at least 2 bytes) |
| 35 | * @chunk_sz: ignored |
| 36 | */ |
| 37 | void crc16_ccitt_wd_buf(const uint8_t *in, uint len, |
| 38 | uint8_t *out, uint chunk_sz); |
Philipp Tomsich | 36b26d1 | 2018-11-25 19:22:18 +0100 | [diff] [blame] | 39 | |
Peter Tyser | 685b7f5 | 2010-04-12 22:28:05 -0500 | [diff] [blame] | 40 | /* lib/crc32.c */ |
Prafulla Wadaskar | 4d4d67d | 2009-08-16 05:28:19 +0530 | [diff] [blame] | 41 | uint32_t crc32 (uint32_t, const unsigned char *, uint); |
| 42 | uint32_t crc32_wd (uint32_t, const unsigned char *, uint, uint); |
| 43 | uint32_t crc32_no_comp (uint32_t, const unsigned char *, uint); |
| 44 | |
Simon Glass | 0bbd76f | 2013-02-24 20:30:22 +0000 | [diff] [blame] | 45 | /** |
| 46 | * crc32_wd_buf - Perform CRC32 on a buffer and return result in buffer |
| 47 | * |
| 48 | * @input: Input buffer |
| 49 | * @ilen: Input buffer length |
| 50 | * @output: Place to put checksum result (4 bytes) |
| 51 | * @chunk_sz: Trigger watchdog after processing this many bytes |
| 52 | */ |
| 53 | void crc32_wd_buf(const unsigned char *input, uint ilen, |
| 54 | unsigned char *output, uint chunk_sz); |
| 55 | |
Marek BehĂșn | cdccc03 | 2017-09-03 17:00:23 +0200 | [diff] [blame] | 56 | /* lib/crc32c.c */ |
| 57 | void crc32c_init(uint32_t *, uint32_t); |
| 58 | uint32_t crc32c_cal(uint32_t, const char *, int, uint32_t *); |
| 59 | |
Prafulla Wadaskar | 4d4d67d | 2009-08-16 05:28:19 +0530 | [diff] [blame] | 60 | #endif /* _UBOOT_CRC_H */ |