xref: /linux/lib/crc/Kconfig (revision e3babebfb83865ec2be90e64d3f73f9aca140b3a)
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 CRC_T10DIF_ARCH
48	bool
49	depends on CRC_T10DIF && CRC_OPTIMIZATIONS
50	default y if ARM && KERNEL_MODE_NEON
51	default y if ARM64
52	default y if PPC64 && ALTIVEC
53	default y if RISCV && RISCV_ISA_ZBC
54	default y if X86
55
56config CRC32
57	tristate
58	select BITREVERSE
59	help
60	  The CRC32 library functions.  Select this if your module uses any of
61	  the functions from <linux/crc32.h> or <linux/crc32c.h>.
62
63config CRC32_ARCH
64	bool
65	depends on CRC32 && CRC_OPTIMIZATIONS
66	default y if ARM && KERNEL_MODE_NEON
67	default y if ARM64
68	default y if LOONGARCH && 64BIT
69	default y if MIPS && CPU_MIPSR6
70	default y if PPC64 && ALTIVEC
71	default y if RISCV && RISCV_ISA_ZBC
72	default y if S390
73	default y if SPARC64
74	default y if X86
75
76config CRC64
77	tristate
78	help
79	  The CRC64 library functions.  Select this if your module uses any of
80	  the functions from <linux/crc64.h>.
81
82config CRC64_ARCH
83	bool
84	depends on CRC64 && CRC_OPTIMIZATIONS
85	default y if ARM && KERNEL_MODE_NEON && !CPU_BIG_ENDIAN
86	default y if ARM64
87	default y if RISCV && RISCV_ISA_ZBC && 64BIT
88	default y if X86_64
89
90config CRC_OPTIMIZATIONS
91	bool "Enable optimized CRC implementations" if EXPERT
92	depends on !UML
93	default y
94	help
95	  Disabling this option reduces code size slightly by disabling the
96	  architecture-optimized implementations of any CRC variants that are
97	  enabled.  CRC checksumming performance may get much slower.
98
99	  Keep this enabled unless you're really trying to minimize the size of
100	  the kernel.
101
102config CRC_KUNIT_TEST
103	tristate "KUnit tests for CRC functions" if !KUNIT_ALL_TESTS
104	depends on KUNIT && (CRC7 || CRC16 || CRC_T10DIF || CRC32 || CRC64)
105	default KUNIT_ALL_TESTS
106	help
107	  Unit tests for the CRC library functions.
108
109	  This is intended to help people writing architecture-specific
110	  optimized versions.  If unsure, say N.
111
112config CRC_ENABLE_ALL_FOR_KUNIT
113	tristate "Enable all CRC functions for KUnit test"
114	depends on KUNIT
115	select CRC7
116	select CRC16
117	select CRC_T10DIF
118	select CRC32
119	select CRC64
120	help
121	  Enable all CRC functions that have test code in CRC_KUNIT_TEST.
122
123	  Enable this only if you'd like the CRC KUnit test suite to test all
124	  the CRC variants, even ones that wouldn't otherwise need to be built.
125
126config CRC_BENCHMARK
127	bool "Benchmark for the CRC functions"
128	depends on CRC_KUNIT_TEST
129	help
130	  Include benchmarks in the KUnit test suite for the CRC functions.
131