X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=lib%2Fcrc8.c;h=87b87b675b27fa77280cdf98a5cdf17c66b79566;hb=164873a0c02ddbc9a59ad3a0670f17684fc00737;hp=8b68a29e40be79d95c85ce88c9c6bd65b643a1be;hpb=33d413fc91e0bbbb92962a80f5333d6f1f628c5b;p=oweals%2Fu-boot.git diff --git a/lib/crc8.c b/lib/crc8.c index 8b68a29e40..87b87b675b 100644 --- a/lib/crc8.c +++ b/lib/crc8.c @@ -1,25 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2013 Google, Inc - * - * SPDX-License-Identifier: GPL-2.0+ */ -#include "linux/crc8.h" +#ifdef USE_HOSTCC +#include +#else +#include +#endif +#include -unsigned int crc8(const unsigned char *vptr, int len) +#define POLY (0x1070U << 3) + +static unsigned char _crc8(unsigned short data) { - const unsigned char *data = vptr; - unsigned int crc = 0; - int i, j; - - for (j = len; j; j--, data++) { - crc ^= (*data << 8); - for (i = 8; i; i--) { - if (crc & 0x8000) - crc ^= (0x1070 << 3); - crc <<= 1; - } + int i; + + for (i = 0; i < 8; i++) { + if (data & 0x8000) + data = data ^ POLY; + data = data << 1; } - return (crc >> 8) & 0xff; + return (unsigned char)(data >> 8); +} + +unsigned int crc8(unsigned int crc, const unsigned char *vptr, int len) +{ + int i; + + for (i = 0; i < len; i++) + crc = _crc8((crc ^ vptr[i]) << 8); + + return crc; }