diff options
Diffstat (limited to 'lib/crc64.c')
| -rw-r--r-- | lib/crc64.c | 49 | 
1 files changed, 11 insertions, 38 deletions
| diff --git a/lib/crc64.c b/lib/crc64.c index 61ae8dfb6a1c..5b1b17057f0a 100644 --- a/lib/crc64.c +++ b/lib/crc64.c @@ -22,8 +22,8 @@   * x^24 + x^23 + x^22 + x^21 + x^19 + x^17 + x^13 + x^12 + x^10 + x^9 +   * x^7 + x^4 + x + 1   * - * crc64rocksoft[256] table is from the Rocksoft specification polynomial - * defined as, + * crc64nvmetable[256] uses the CRC64 polynomial from the NVME NVM Command Set + * Specification and uses least-significant-bit first bit order:   *   * x^64 + x^63 + x^61 + x^59 + x^58 + x^56 + x^55 + x^52 + x^49 + x^48 + x^47 +   * x^46 + x^44 + x^41 + x^37 + x^36 + x^34 + x^32 + x^31 + x^28 + x^26 + x^23 + @@ -41,45 +41,18 @@  MODULE_DESCRIPTION("CRC64 calculations");  MODULE_LICENSE("GPL v2"); -/** - * crc64_be - Calculate bitwise big-endian ECMA-182 CRC64 - * @crc: seed value for computation. 0 or (u64)~0 for a new CRC calculation, - *       or the previous crc64 value if computing incrementally. - * @p: pointer to buffer over which CRC64 is run - * @len: length of buffer @p - */ -u64 __pure crc64_be(u64 crc, const void *p, size_t len) +u64 crc64_be_generic(u64 crc, const u8 *p, size_t len)  { -	size_t i, t; - -	const unsigned char *_p = p; - -	for (i = 0; i < len; i++) { -		t = ((crc >> 56) ^ (*_p++)) & 0xFF; -		crc = crc64table[t] ^ (crc << 8); -	} - +	while (len--) +		crc = (crc << 8) ^ crc64table[(crc >> 56) ^ *p++];  	return crc;  } -EXPORT_SYMBOL_GPL(crc64_be); +EXPORT_SYMBOL_GPL(crc64_be_generic); -/** - * crc64_rocksoft_generic - Calculate bitwise Rocksoft CRC64 - * @crc: seed value for computation. 0 for a new CRC calculation, or the - * 	 previous crc64 value if computing incrementally. - * @p: pointer to buffer over which CRC64 is run - * @len: length of buffer @p - */ -u64 __pure crc64_rocksoft_generic(u64 crc, const void *p, size_t len) +u64 crc64_nvme_generic(u64 crc, const u8 *p, size_t len)  { -	const unsigned char *_p = p; -	size_t i; - -	crc = ~crc; - -	for (i = 0; i < len; i++) -		crc = (crc >> 8) ^ crc64rocksofttable[(crc & 0xff) ^ *_p++]; - -	return ~crc; +	while (len--) +		crc = (crc >> 8) ^ crc64nvmetable[(crc & 0xff) ^ *p++]; +	return crc;  } -EXPORT_SYMBOL_GPL(crc64_rocksoft_generic); +EXPORT_SYMBOL_GPL(crc64_nvme_generic); | 
