^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) /* Try to choose an implementation variant via Kconfig */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #ifdef CONFIG_CRC32_SLICEBY8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) # define CRC_LE_BITS 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) # define CRC_BE_BITS 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifdef CONFIG_CRC32_SLICEBY4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) # define CRC_LE_BITS 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) # define CRC_BE_BITS 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #ifdef CONFIG_CRC32_SARWATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) # define CRC_LE_BITS 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) # define CRC_BE_BITS 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #ifdef CONFIG_CRC32_BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) # define CRC_LE_BITS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) # define CRC_BE_BITS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * How many bits at a time to use. Valid values are 1, 2, 4, 8, 32 and 64.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * For less performance-sensitive, use 4 or 8 to save table size.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * For larger systems choose same as CPU architecture as default.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * This works well on X86_64, SPARC64 systems. This may require some
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * elaboration after experiments with other architectures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #ifndef CRC_LE_BITS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) # ifdef CONFIG_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) # define CRC_LE_BITS 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) # else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) # define CRC_LE_BITS 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) # endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #ifndef CRC_BE_BITS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) # ifdef CONFIG_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) # define CRC_BE_BITS 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) # else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) # define CRC_BE_BITS 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) # endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) * Little-endian CRC computation. Used with serial bit streams sent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * lsbit-first. Be sure to use cpu_to_le32() to append the computed CRC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #if CRC_LE_BITS > 64 || CRC_LE_BITS < 1 || CRC_LE_BITS == 16 || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) CRC_LE_BITS & CRC_LE_BITS-1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) # error "CRC_LE_BITS must be one of {1, 2, 4, 8, 32, 64}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) * Big-endian CRC computation. Used with serial bit streams sent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) * msbit-first. Be sure to use cpu_to_be32() to append the computed CRC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #if CRC_BE_BITS > 64 || CRC_BE_BITS < 1 || CRC_BE_BITS == 16 || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) CRC_BE_BITS & CRC_BE_BITS-1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) # error "CRC_BE_BITS must be one of {1, 2, 4, 8, 32, 64}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #endif