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