lib: add rocksoft model crc64
authorKeith Busch <kbusch@kernel.org>
Thu, 3 Mar 2022 20:13:09 +0000 (12:13 -0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 7 Mar 2022 19:48:35 +0000 (12:48 -0700)
commitcbc0a40e17da361a2ada8d669413ccfbd2028f2d
tree121a5f6ee13d4e8b8e4d328cd1494c9ccdba59c9
parent7ee8809df990d1de379002973baee1681e8d7dd3
lib: add rocksoft model crc64

The NVM Express specification extended data integrity fields to 64 bits
using the Rocksoft parameters. Add the poly to the crc64 table
generation, and provide a generic library routine implementing the
algorithm.

The Rocksoft 64-bit CRC model parameters are as follows:
    Poly: 0xAD93D23594C93659
    Initial value: 0xFFFFFFFFFFFFFFFF
    Reflected Input: True
    Reflected Output: True
    Xor Final: 0xFFFFFFFFFFFFFFFF

Since this model used reflected bits, the implementation generates the
reflected table so the result is ordered consistently.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20220303201312.3255347-6-kbusch@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/crc64.h
lib/crc64.c
lib/gen_crc64table.c