xref: /linux/lib/crc/Kconfig (revision 2374bf23864932eb32ff209aaf6b82b569d61b2a)
1# SPDX-License-Identifier: GPL-2.0-only
2
3# Kconfig for the kernel's cyclic redundancy check (CRC) library code
4
5config CRC4
6	tristate
7	help
8	  The CRC4 library functions.  Select this if your module uses any of
9	  the functions from <linux/crc4.h>.
10
11config CRC7
12	tristate
13	help
14	  The CRC7 library functions.  Select this if your module uses any of
15	  the functions from <linux/crc7.h>.
16
17config CRC8
18	tristate
19	help
20	  The CRC8 library functions.  Select this if your module uses any of
21	  the functions from <linux/crc8.h>.
22
23config CRC16
24	tristate
25	help
26	  The CRC16 library functions.  Select this if your module uses any of
27	  the functions from <linux/crc16.h>.
28
29config CRC_CCITT
30	tristate
31	help
32	  The CRC-CCITT library functions.  Select this if your module uses any
33	  of the functions from <linux/crc-ccitt.h>.
34
35config CRC_ITU_T
36	tristate
37	help
38	  The CRC-ITU-T library functions.  Select this if your module uses
39	  any of the functions from <linux/crc-itu-t.h>.
40
41config CRC_T10DIF
42	tristate
43	help
44	  The CRC-T10DIF library functions.  Select this if your module uses
45	  any of the functions from <linux/crc-t10dif.h>.
46
47config ARCH_HAS_CRC_T10DIF
48	bool
49
50config CRC_T10DIF_ARCH
51	bool
52	depends on CRC_T10DIF && CRC_OPTIMIZATIONS
53	default y if ARM && KERNEL_MODE_NEON
54	default y if ARM64 && KERNEL_MODE_NEON
55	default y if PPC64 && ALTIVEC
56	default y if RISCV && RISCV_ISA_ZBC
57
58config CRC32
59	tristate
60	select BITREVERSE
61	help
62	  The CRC32 library functions.  Select this if your module uses any of
63	  the functions from <linux/crc32.h> or <linux/crc32c.h>.
64
65config ARCH_HAS_CRC32
66	bool
67
68config CRC32_ARCH
69	bool
70	depends on CRC32 && CRC_OPTIMIZATIONS
71	default y if ARM && KERNEL_MODE_NEON
72	default y if ARM64
73	default y if LOONGARCH
74	default y if MIPS && CPU_MIPSR6
75	default y if PPC64 && ALTIVEC
76	default y if RISCV && RISCV_ISA_ZBC
77	default y if S390
78
79config CRC64
80	tristate
81	help
82	  The CRC64 library functions.  Select this if your module uses any of
83	  the functions from <linux/crc64.h>.
84
85config ARCH_HAS_CRC64
86	bool
87
88config CRC64_ARCH
89	bool
90	depends on CRC64 && CRC_OPTIMIZATIONS
91	default y if RISCV && RISCV_ISA_ZBC && 64BIT
92
93config CRC_OPTIMIZATIONS
94	bool "Enable optimized CRC implementations" if EXPERT
95	depends on !UML
96	default y
97	help
98	  Disabling this option reduces code size slightly by disabling the
99	  architecture-optimized implementations of any CRC variants that are
100	  enabled.  CRC checksumming performance may get much slower.
101
102	  Keep this enabled unless you're really trying to minimize the size of
103	  the kernel.
104
105config CRC_KUNIT_TEST
106	tristate "KUnit tests for CRC functions" if !KUNIT_ALL_TESTS
107	depends on KUNIT
108	default KUNIT_ALL_TESTS
109	select CRC7
110	select CRC16
111	select CRC_T10DIF
112	select CRC32
113	select CRC64
114	help
115	  Unit tests for the CRC library functions.
116
117	  This is intended to help people writing architecture-specific
118	  optimized versions.  If unsure, say N.
119
120config CRC_BENCHMARK
121	bool "Benchmark for the CRC functions"
122	depends on CRC_KUNIT_TEST
123	help
124	  Include benchmarks in the KUnit test suite for the CRC functions.
125