sdk-hwV1.3/lichee/linux-4.9/modules/nand/common1/phy-nand/sst_crc.c

32 lines
637 B
C

#include "sst_crc.h"
unsigned int sst_crc32(unsigned int crc, void *buffer, unsigned int length)
{
unsigned int i, j;
crc32_data_t crc32;
unsigned int crc32_calc = 0xffffffff;
crc32.crc = crc;
for (i = 0; i < 256; ++i) {
crc32.crc = i;
for (j = 0; j < 8; ++j) {
if (crc32.crc & 1)
crc32.crc = (crc32.crc >> 1) ^ 0xedb88320;
else
crc32.crc >>= 1;
}
crc32.crc_32_tbl[i] = crc32.crc;
}
crc32_calc = 0xffffffff;
for (i = 0; i < length; ++i) {
crc32_calc =
crc32.
crc_32_tbl[(crc32_calc ^ ((unsigned char *)buffer)[i]) & 0xff] ^
(crc32_calc >> 8);
}
return crc32_calc ^ 0xffffffff;
}