diff options
Diffstat (limited to 'lib/crc32defs.h')
-rw-r--r-- | lib/crc32defs.h | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/lib/crc32defs.h b/lib/crc32defs.h index 9b6773d73749..64cba2c3c700 100644 --- a/lib/crc32defs.h +++ b/lib/crc32defs.h | |||
@@ -6,27 +6,67 @@ | |||
6 | #define CRCPOLY_LE 0xedb88320 | 6 | #define CRCPOLY_LE 0xedb88320 |
7 | #define CRCPOLY_BE 0x04c11db7 | 7 | #define CRCPOLY_BE 0x04c11db7 |
8 | 8 | ||
9 | /* How many bits at a time to use. Requires a table of 4<<CRC_xx_BITS bytes. */ | 9 | /* |
10 | /* For less performance-sensitive, use 4 */ | 10 | * This is the CRC32c polynomial, as outlined by Castagnoli. |
11 | #ifndef CRC_LE_BITS | 11 | * 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+ |
12 | * x^8+x^6+x^0 | ||
13 | */ | ||
14 | #define CRC32C_POLY_LE 0x82F63B78 | ||
15 | |||
16 | /* Try to choose an implementation variant via Kconfig */ | ||
17 | #ifdef CONFIG_CRC32_SLICEBY8 | ||
18 | # define CRC_LE_BITS 64 | ||
19 | # define CRC_BE_BITS 64 | ||
20 | #endif | ||
21 | #ifdef CONFIG_CRC32_SLICEBY4 | ||
22 | # define CRC_LE_BITS 32 | ||
23 | # define CRC_BE_BITS 32 | ||
24 | #endif | ||
25 | #ifdef CONFIG_CRC32_SARWATE | ||
12 | # define CRC_LE_BITS 8 | 26 | # define CRC_LE_BITS 8 |
27 | # define CRC_BE_BITS 8 | ||
28 | #endif | ||
29 | #ifdef CONFIG_CRC32_BIT | ||
30 | # define CRC_LE_BITS 1 | ||
31 | # define CRC_BE_BITS 1 | ||
32 | #endif | ||
33 | |||
34 | /* | ||
35 | * How many bits at a time to use. Valid values are 1, 2, 4, 8, 32 and 64. | ||
36 | * For less performance-sensitive, use 4 or 8 to save table size. | ||
37 | * For larger systems choose same as CPU architecture as default. | ||
38 | * This works well on X86_64, SPARC64 systems. This may require some | ||
39 | * elaboration after experiments with other architectures. | ||
40 | */ | ||
41 | #ifndef CRC_LE_BITS | ||
42 | # ifdef CONFIG_64BIT | ||
43 | # define CRC_LE_BITS 64 | ||
44 | # else | ||
45 | # define CRC_LE_BITS 32 | ||
46 | # endif | ||
13 | #endif | 47 | #endif |
14 | #ifndef CRC_BE_BITS | 48 | #ifndef CRC_BE_BITS |
15 | # define CRC_BE_BITS 8 | 49 | # ifdef CONFIG_64BIT |
50 | # define CRC_BE_BITS 64 | ||
51 | # else | ||
52 | # define CRC_BE_BITS 32 | ||
53 | # endif | ||
16 | #endif | 54 | #endif |
17 | 55 | ||
18 | /* | 56 | /* |
19 | * Little-endian CRC computation. Used with serial bit streams sent | 57 | * Little-endian CRC computation. Used with serial bit streams sent |
20 | * lsbit-first. Be sure to use cpu_to_le32() to append the computed CRC. | 58 | * lsbit-first. Be sure to use cpu_to_le32() to append the computed CRC. |
21 | */ | 59 | */ |
22 | #if CRC_LE_BITS > 8 || CRC_LE_BITS < 1 || CRC_LE_BITS & CRC_LE_BITS-1 | 60 | #if CRC_LE_BITS > 64 || CRC_LE_BITS < 1 || CRC_LE_BITS == 16 || \ |
23 | # error CRC_LE_BITS must be a power of 2 between 1 and 8 | 61 | CRC_LE_BITS & CRC_LE_BITS-1 |
62 | # error "CRC_LE_BITS must be one of {1, 2, 4, 8, 32, 64}" | ||
24 | #endif | 63 | #endif |
25 | 64 | ||
26 | /* | 65 | /* |
27 | * Big-endian CRC computation. Used with serial bit streams sent | 66 | * Big-endian CRC computation. Used with serial bit streams sent |
28 | * msbit-first. Be sure to use cpu_to_be32() to append the computed CRC. | 67 | * msbit-first. Be sure to use cpu_to_be32() to append the computed CRC. |
29 | */ | 68 | */ |
30 | #if CRC_BE_BITS > 8 || CRC_BE_BITS < 1 || CRC_BE_BITS & CRC_BE_BITS-1 | 69 | #if CRC_BE_BITS > 64 || CRC_BE_BITS < 1 || CRC_BE_BITS == 16 || \ |
31 | # error CRC_BE_BITS must be a power of 2 between 1 and 8 | 70 | CRC_BE_BITS & CRC_BE_BITS-1 |
71 | # error "CRC_BE_BITS must be one of {1, 2, 4, 8, 32, 64}" | ||
32 | #endif | 72 | #endif |