Back to home page

LXR

 
 

    


0001 /*
0002  * There are multiple 16-bit CRC polynomials in common use, but this is
0003  * *the* standard CRC-32 polynomial, first popularized by Ethernet.
0004  * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0
0005  */
0006 #define CRCPOLY_LE 0xedb88320
0007 #define CRCPOLY_BE 0x04c11db7
0008 
0009 /*
0010  * This is the CRC32c polynomial, as outlined by Castagnoli.
0011  * x^32+x^28+x^27+x^26+x^25+x^23+x^22+x^20+x^19+x^18+x^14+x^13+x^11+x^10+x^9+
0012  * x^8+x^6+x^0
0013  */
0014 #define CRC32C_POLY_LE 0x82F63B78
0015 
0016 /* Try to choose an implementation variant via Kconfig */
0017 #ifdef CONFIG_CRC32_SLICEBY8
0018 # define CRC_LE_BITS 64
0019 # define CRC_BE_BITS 64
0020 #endif
0021 #ifdef CONFIG_CRC32_SLICEBY4
0022 # define CRC_LE_BITS 32
0023 # define CRC_BE_BITS 32
0024 #endif
0025 #ifdef CONFIG_CRC32_SARWATE
0026 # define CRC_LE_BITS 8
0027 # define CRC_BE_BITS 8
0028 #endif
0029 #ifdef CONFIG_CRC32_BIT
0030 # define CRC_LE_BITS 1
0031 # define CRC_BE_BITS 1
0032 #endif
0033 
0034 /*
0035  * How many bits at a time to use.  Valid values are 1, 2, 4, 8, 32 and 64.
0036  * For less performance-sensitive, use 4 or 8 to save table size.
0037  * For larger systems choose same as CPU architecture as default.
0038  * This works well on X86_64, SPARC64 systems. This may require some
0039  * elaboration after experiments with other architectures.
0040  */
0041 #ifndef CRC_LE_BITS
0042 #  ifdef CONFIG_64BIT
0043 #  define CRC_LE_BITS 64
0044 #  else
0045 #  define CRC_LE_BITS 32
0046 #  endif
0047 #endif
0048 #ifndef CRC_BE_BITS
0049 #  ifdef CONFIG_64BIT
0050 #  define CRC_BE_BITS 64
0051 #  else
0052 #  define CRC_BE_BITS 32
0053 #  endif
0054 #endif
0055 
0056 /*
0057  * Little-endian CRC computation.  Used with serial bit streams sent
0058  * lsbit-first.  Be sure to use cpu_to_le32() to append the computed CRC.
0059  */
0060 #if CRC_LE_BITS > 64 || CRC_LE_BITS < 1 || CRC_LE_BITS == 16 || \
0061     CRC_LE_BITS & CRC_LE_BITS-1
0062 # error "CRC_LE_BITS must be one of {1, 2, 4, 8, 32, 64}"
0063 #endif
0064 
0065 /*
0066  * Big-endian CRC computation.  Used with serial bit streams sent
0067  * msbit-first.  Be sure to use cpu_to_be32() to append the computed CRC.
0068  */
0069 #if CRC_BE_BITS > 64 || CRC_BE_BITS < 1 || CRC_BE_BITS == 16 || \
0070     CRC_BE_BITS & CRC_BE_BITS-1
0071 # error "CRC_BE_BITS must be one of {1, 2, 4, 8, 32, 64}"
0072 #endif