# SPDX-License-Identifier: GPL-2.0-only

# Kconfig for the kernel's cyclic redundancy check (CRC) library code

config CRC4
	tristate
	help
	  The CRC4 library functions.  Select this if your module uses any of
	  the functions from <linux/crc4.h>.

config CRC7
	tristate
	help
	  The CRC7 library functions.  Select this if your module uses any of
	  the functions from <linux/crc7.h>.

config CRC8
	tristate
	help
	  The CRC8 library functions.  Select this if your module uses any of
	  the functions from <linux/crc8.h>.

config CRC16
	tristate
	help
	  The CRC16 library functions.  Select this if your module uses any of
	  the functions from <linux/crc16.h>.

config CRC_CCITT
	tristate
	help
	  The CRC-CCITT library functions.  Select this if your module uses any
	  of the functions from <linux/crc-ccitt.h>.

config CRC_ITU_T
	tristate
	help
	  The CRC-ITU-T library functions.  Select this if your module uses
	  any of the functions from <linux/crc-itu-t.h>.

config CRC_T10DIF
	tristate
	help
	  The CRC-T10DIF library functions.  Select this if your module uses
	  any of the functions from <linux/crc-t10dif.h>.

config CRC_T10DIF_ARCH
	bool
	depends on CRC_T10DIF && CRC_OPTIMIZATIONS
	default y if ARM && KERNEL_MODE_NEON
	default y if ARM64
	default y if PPC64 && ALTIVEC
	default y if RISCV && RISCV_ISA_ZBC
	default y if X86

config CRC32
	tristate
	select BITREVERSE
	help
	  The CRC32 library functions.  Select this if your module uses any of
	  the functions from <linux/crc32.h> or <linux/crc32c.h>.

config CRC32_ARCH
	bool
	depends on CRC32 && CRC_OPTIMIZATIONS
	default y if ARM && KERNEL_MODE_NEON
	default y if ARM64
	default y if LOONGARCH && 64BIT
	default y if MIPS && CPU_MIPSR6
	default y if PPC64 && ALTIVEC
	default y if RISCV && RISCV_ISA_ZBC
	default y if S390
	default y if SPARC64
	default y if X86

config CRC64
	tristate
	help
	  The CRC64 library functions.  Select this if your module uses any of
	  the functions from <linux/crc64.h>.

config CRC64_ARCH
	bool
	depends on CRC64 && CRC_OPTIMIZATIONS
	default y if ARM64
	default y if RISCV && RISCV_ISA_ZBC && 64BIT
	default y if X86_64

config CRC_OPTIMIZATIONS
	bool "Enable optimized CRC implementations" if EXPERT
	depends on !UML
	default y
	help
	  Disabling this option reduces code size slightly by disabling the
	  architecture-optimized implementations of any CRC variants that are
	  enabled.  CRC checksumming performance may get much slower.

	  Keep this enabled unless you're really trying to minimize the size of
	  the kernel.

config CRC_KUNIT_TEST
	tristate "KUnit tests for CRC functions" if !KUNIT_ALL_TESTS
	depends on KUNIT && (CRC7 || CRC16 || CRC_T10DIF || CRC32 || CRC64)
	default KUNIT_ALL_TESTS
	help
	  Unit tests for the CRC library functions.

	  This is intended to help people writing architecture-specific
	  optimized versions.  If unsure, say N.

config CRC_ENABLE_ALL_FOR_KUNIT
	tristate "Enable all CRC functions for KUnit test"
	depends on KUNIT
	select CRC7
	select CRC16
	select CRC_T10DIF
	select CRC32
	select CRC64
	help
	  Enable all CRC functions that have test code in CRC_KUNIT_TEST.

	  Enable this only if you'd like the CRC KUnit test suite to test all
	  the CRC variants, even ones that wouldn't otherwise need to be built.

config CRC_BENCHMARK
	bool "Benchmark for the CRC functions"
	depends on CRC_KUNIT_TEST
	help
	  Include benchmarks in the KUnit test suite for the CRC functions.
