Hi Łukasz, the Castagnoli CRC32 algorithm just uses different polynomial. Perhaps I should generalize the original CRC32.
Marek On Sun, 3 Sep 2017 17:47:28 +0200 Łukasz Majewski <[email protected]> wrote: > Hi Marek, > > > This is needed for BTRFS. > > > > Signed-off-by: Marek Behun <[email protected]> > > > > create mode 100644 lib/crc32c.c > > Excuse me my ignorance, but in u-boot we already have: > ./lib/crc32.c > > is the crc32c algorithm a different one from venerable crc32? > > > > > > diff --git a/include/u-boot/crc.h b/include/u-boot/crc.h > > index 6764d58bab..6d08f5df98 100644 > > --- a/include/u-boot/crc.h > > +++ b/include/u-boot/crc.h > > @@ -28,4 +28,8 @@ uint32_t crc32_no_comp (uint32_t, const unsigned > > char *, uint); void crc32_wd_buf(const unsigned char *input, uint > > ilen, unsigned char *output, uint chunk_sz); > > > > +/* lib/crc32c.c */ > > +void crc32c_init(uint32_t *, uint32_t); > > +uint32_t crc32c_cal(uint32_t, const char *, int, uint32_t *); > > + > > #endif /* _UBOOT_CRC_H */ > > diff --git a/lib/Kconfig b/lib/Kconfig > > index fe337acaeb..29e55dbe1d 100644 > > --- a/lib/Kconfig > > +++ b/lib/Kconfig > > @@ -146,6 +146,9 @@ config SHA_PROG_HW_ACCEL > > config MD5 > > bool > > > > +config CRC32C > > + bool > > + > > endmenu > > > > menu "Compression Support" > > diff --git a/lib/Makefile b/lib/Makefile > > index 2eef1eb80e..a58ce0f815 100644 > > --- a/lib/Makefile > > +++ b/lib/Makefile > > @@ -67,6 +67,7 @@ obj-y += display_options.o > > CFLAGS_display_options.o := $(if > > $(BUILD_TAG),-DBUILD_TAG='"$(BUILD_TAG)"') obj-$(CONFIG_BCH) += > > bch.o obj-y += crc32.o > > +obj-$(CONFIG_CRC32C) += crc32c.o > > obj-y += ctype.o > > obj-y += div64.o > > obj-y += hang.o > > diff --git a/lib/crc32c.c b/lib/crc32c.c > > new file mode 100644 > > index 0000000000..322c08ff5d > > --- /dev/null > > +++ b/lib/crc32c.c > > @@ -0,0 +1,38 @@ > > +/* > > + * Copied from Linux kernel crypto/crc32c.c > > + * Copyright (c) 2004 Cisco Systems, Inc. > > + * Copyright (c) 2008 Herbert Xu <[email protected]> > > + * > > + * This program is free software; you can redistribute it and/or > > modify it > > + * under the terms of the GNU General Public License as published > > by the Free > > + * Software Foundation; either version 2 of the License, or (at > > your option) > > + * any later version. > > + * SPDX-License-Identifier: GPL-2.0+ > > + */ > > + > > +#include <common.h> > > +#include <compiler.h> > > + > > +uint32_t crc32c_cal(uint32_t crc, const char *data, int length, > > + uint32_t *crc32c_table) > > +{ > > + while (length--) > > + crc = crc32c_table[(u8)(crc ^ *data++)] ^ (crc >> > > 8); + > > + return crc; > > +} > > + > > +void crc32c_init(uint32_t *crc32c_table, uint32_t pol) > > +{ > > + int i, j; > > + uint32_t v; > > + const uint32_t poly = pol; /* Bit-reflected CRC32C > > polynomial */ + > > + for (i = 0; i < 256; i++) { > > + v = i; > > + for (j = 0; j < 8; j++) > > + v = (v >> 1) ^ ((v & 1) ? poly : 0); > > + > > + crc32c_table[i] = v; > > + } > > +} > > > > _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

