X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=lib%2Fcrc8.c;h=55f7c07285cd3baf32612eaaf44fbed167a1ffcf;hb=98c0d49c3d52a44fd27648cdb7107632bb5f2600;hp=8b68a29e40be79d95c85ce88c9c6bd65b643a1be;hpb=33d413fc91e0bbbb92962a80f5333d6f1f628c5b;p=oweals%2Fu-boot.git diff --git a/lib/crc8.c b/lib/crc8.c index 8b68a29e40..55f7c07285 100644 --- a/lib/crc8.c +++ b/lib/crc8.c @@ -1,25 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2013 Google, Inc - * - * SPDX-License-Identifier: GPL-2.0+ */ #include "linux/crc8.h" -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; }