/* SPDX-License-Identifier: GPL-2.0-only */
/* This file is part of the coreboot project. */

#ifndef CRC_BYTE_H
#define CRC_BYTE_H

#include <stdint.h>

/* This function is used to calculate crc7 byte by byte, with polynomial
 * x^7 + x^3 + 1.
 *
 * prev_crc: old crc result (0 for first)
 * data: new byte
 * return value: new crc result
 */
uint8_t crc7_byte(uint8_t prev_crc, uint8_t data);

/* This function is used to calculate crc16 byte by byte, with polynomial
 * x^16 + x^12 + x^5 + 1.
 *
 * prev_crc: old crc result (0 for first)
 * data: new byte
 * return value: new crc result
 */
uint16_t crc16_byte(uint16_t prev_crc, uint8_t data);

/* This function is used to calculate crc32 byte by byte, with polynomial
 * x^32 + x^26 +  x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 +
 * x^5 + x^4 + x^2 + x + 1
 *
 * prev_crc: old crc result (0 for first)
 * data: new byte
 * return value: new crc result
 */
uint32_t crc32_byte(uint32_t prev_crc, uint8_t data);

#define CRC(buf, size, crc_func) ({ \
	const uint8_t *_crc_local_buf = (const uint8_t *)buf; \
	size_t _crc_local_size = size; \
	__typeof__(crc_func(0, 0)) _crc_local_result = 0; \
	while (_crc_local_size--) { \
		_crc_local_result = crc_func(_crc_local_result, *_crc_local_buf++); \
	} \
	_crc_local_result; \
})

#endif /* CRC_BYTE_H */
