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