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

config BINARY_PRINTF
	def_bool n

menu "Library routines"

config RAID6_PQ
	tristate

config RAID6_PQ_BENCHMARK
	bool "Automatically choose fastest RAID6 PQ functions"
	depends on RAID6_PQ
	default y
	help
	  Benchmark all available RAID6 PQ functions on init and choose the
	  fastest one.

config LINEAR_RANGES
	tristate

config PACKING
	bool "Generic bitfield packing and unpacking"
	select BITREVERSE
	default n
	help
	  This option provides the packing() helper function, which permits
	  converting bitfields between a CPU-usable representation and a
	  memory representation that can have any combination of these quirks:
	    - Is little endian (bytes are reversed within a 32-bit group)
	    - The least-significant 32-bit word comes first (within a 64-bit
	      group)
	    - The most significant bit of a byte is at its right (bit 0 of a
	      register description is numerically 2^7).
	  Drivers may use these helpers to match the bit indices as described
	  in the data sheets of the peripherals they are in control of.

	  When in doubt, say N.

config BITREVERSE
	tristate

config HAVE_ARCH_BITREVERSE
	bool
	default n
	help
	  This option enables the use of hardware bit-reversal instructions on
	  architectures which support such operations.

config ARCH_HAS_STRNCPY_FROM_USER
	bool

config ARCH_HAS_STRNLEN_USER
	bool

config GENERIC_STRNCPY_FROM_USER
	def_bool !ARCH_HAS_STRNCPY_FROM_USER

config GENERIC_STRNLEN_USER
	def_bool !ARCH_HAS_STRNLEN_USER

config GENERIC_NET_UTILS
	bool

source "lib/math/Kconfig"

config NO_GENERIC_PCI_IOPORT_MAP
	bool

config GENERIC_PCI_IOMAP
	bool

config GENERIC_IOMAP
	bool
	select GENERIC_PCI_IOMAP

config STMP_DEVICE
	bool

config ARCH_USE_CMPXCHG_LOCKREF
	bool

config ARCH_HAS_FAST_MULTIPLIER
	bool

config ARCH_USE_SYM_ANNOTATIONS
	bool

config INDIRECT_PIO
	bool "Access I/O in non-MMIO mode"
	depends on ARM64
	help
	  On some platforms where no separate I/O space exists, there are I/O
	  hosts which can not be accessed in MMIO mode. Using the logical PIO
	  mechanism, the host-local I/O resource can be mapped into system
	  logic PIO space shared with MMIO hosts, such as PCI/PCIe, then the
	  system can access the I/O devices with the mapped-logic PIO through
	  I/O accessors.

	  This way has relatively little I/O performance cost. Please make
	  sure your devices really need this configure item enabled.

	  When in doubt, say N.

config INDIRECT_IOMEM
	bool
	help
	  This is selected by other options/architectures to provide the
	  emulated iomem accessors.

config INDIRECT_IOMEM_FALLBACK
	bool
	depends on INDIRECT_IOMEM
	help
	  If INDIRECT_IOMEM is selected, this enables falling back to plain
	  mmio accesses when the IO memory address is not a registered
	  emulated region.

config TRACE_MMIO_ACCESS
	bool "Register read/write tracing"
	depends on TRACING && ARCH_HAVE_TRACE_MMIO_ACCESS
	help
	  Create tracepoints for MMIO read/write operations. These trace events
	  can be used for logging all MMIO read/write operations.

source "lib/crypto/Kconfig"

config CRC_CCITT
	tristate "CRC-CCITT functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC-CCITT functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC-CCITT
	  functions require M here.

config CRC16
	tristate "CRC16 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC16 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC16
	  functions require M here.

config CRC_T10DIF
	tristate "CRC calculation for the T10 Data Integrity Field"
	select CRYPTO
	select CRYPTO_CRCT10DIF
	help
	  This option is only needed if a module that's not in the
	  kernel tree needs to calculate CRC checks for use with the
	  SCSI data integrity subsystem.

config CRC64_ROCKSOFT
	tristate "CRC calculation for the Rocksoft model CRC64"
	select CRC64
	select CRYPTO
	select CRYPTO_CRC64_ROCKSOFT
	help
	  This option provides a CRC64 API to a registered crypto driver.
	  This is used with the block layer's data integrity subsystem.

config CRC_ITU_T
	tristate "CRC ITU-T V.41 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC ITU-T V.41 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC ITU-T V.41
	  functions require M here.

config CRC32
	tristate "CRC32/CRC32c functions"
	default y
	select BITREVERSE
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC32/CRC32c functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC32/CRC32c
	  functions require M here.

config CRC32_SELFTEST
	tristate "CRC32 perform self test on init"
	depends on CRC32
	help
	  This option enables the CRC32 library functions to perform a
	  self test on initialization. The self test computes crc32_le
	  and crc32_be over byte strings with random alignment and length
	  and computes the total elapsed time and number of bytes processed.

choice
	prompt "CRC32 implementation"
	depends on CRC32
	default CRC32_SLICEBY8
	help
	  This option allows a kernel builder to override the default choice
	  of CRC32 algorithm.  Choose the default ("slice by 8") unless you
	  know that you need one of the others.

config CRC32_SLICEBY8
	bool "Slice by 8 bytes"
	help
	  Calculate checksum 8 bytes at a time with a clever slicing algorithm.
	  This is the fastest algorithm, but comes with a 8KiB lookup table.
	  Most modern processors have enough cache to hold this table without
	  thrashing the cache.

	  This is the default implementation choice.  Choose this one unless
	  you have a good reason not to.

config CRC32_SLICEBY4
	bool "Slice by 4 bytes"
	help
	  Calculate checksum 4 bytes at a time with a clever slicing algorithm.
	  This is a bit slower than slice by 8, but has a smaller 4KiB lookup
	  table.

	  Only choose this option if you know what you are doing.

config CRC32_SARWATE
	bool "Sarwate's Algorithm (one byte at a time)"
	help
	  Calculate checksum a byte at a time using Sarwate's algorithm.  This
	  is not particularly fast, but has a small 256 byte lookup table.

	  Only choose this option if you know what you are doing.

config CRC32_BIT
	bool "Classic Algorithm (one bit at a time)"
	help
	  Calculate checksum one bit at a time.  This is VERY slow, but has
	  no lookup table.  This is provided as a debugging option.

	  Only choose this option if you are debugging crc32.

endchoice

config CRC64
	tristate "CRC64 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC64 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC64
	  functions require M here.

config CRC4
	tristate "CRC4 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC4 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC4
	  functions require M here.

config CRC7
	tristate "CRC7 functions"
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC7 functions, but a module built outside
	  the kernel tree does. Such modules that use library CRC7
	  functions require M here.

config LIBCRC32C
	tristate "CRC32c (Castagnoli, et al) Cyclic Redundancy-Check"
	select CRYPTO
	select CRYPTO_CRC32C
	help
	  This option is provided for the case where no in-kernel-tree
	  modules require CRC32c functions, but a module built outside the
	  kernel tree does. Such modules that use library CRC32c functions
	  require M here.  See Castagnoli93.
	  Module will be libcrc32c.

config CRC8
	tristate "CRC8 function"
	help
	  This option provides CRC8 function. Drivers may select this
	  when they need to do cyclic redundancy check according CRC8
	  algorithm. Module will be called crc8.

config XXHASH
	tristate

config AUDIT_GENERIC
	bool
	depends on AUDIT && !AUDIT_ARCH
	default y

config AUDIT_ARCH_COMPAT_GENERIC
	bool
	default n

config AUDIT_COMPAT_GENERIC
	bool
	depends on AUDIT_GENERIC && AUDIT_ARCH_COMPAT_GENERIC && COMPAT
	default y

config RANDOM32_SELFTEST
	bool "PRNG perform self test on init"
	help
	  This option enables the 32 bit PRNG library functions to perform a
	  self test on initialization.

#
# compression support is select'ed if needed
#
config 842_COMPRESS
	select CRC32
	tristate

config 842_DECOMPRESS
	select CRC32
	tristate

config ZLIB_INFLATE
	tristate

config ZLIB_DEFLATE
	tristate
	select BITREVERSE

config ZLIB_DFLTCC
	def_bool y
	depends on S390
	prompt "Enable s390x DEFLATE CONVERSION CALL support for kernel zlib"
	help
	 Enable s390x hardware support for zlib in the kernel.

config LZO_COMPRESS
	tristate

config LZO_DECOMPRESS
	tristate

config LZ4_COMPRESS
	tristate

config LZ4HC_COMPRESS
	tristate

config LZ4_DECOMPRESS
	tristate

config ZSTD_COMMON
	select XXHASH
	tristate

config ZSTD_COMPRESS
	select ZSTD_COMMON
	tristate

config ZSTD_DECOMPRESS
	select ZSTD_COMMON
	tristate

source "lib/xz/Kconfig"

#
# These all provide a common interface (hence the apparent duplication with
# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
#
config DECOMPRESS_GZIP
	select ZLIB_INFLATE
	tristate

config DECOMPRESS_BZIP2
	tristate

config DECOMPRESS_LZMA
	tristate

config DECOMPRESS_XZ
	select XZ_DEC
	tristate

config DECOMPRESS_LZO
	select LZO_DECOMPRESS
	tristate

config DECOMPRESS_LZ4
	select LZ4_DECOMPRESS
	tristate

config DECOMPRESS_ZSTD
	select ZSTD_DECOMPRESS
	tristate

#
# Generic allocator support is selected if needed
#
config GENERIC_ALLOCATOR
	bool

#
# reed solomon support is select'ed if needed
#
config REED_SOLOMON
	tristate
	
config REED_SOLOMON_ENC8
	bool

config REED_SOLOMON_DEC8
	bool

config REED_SOLOMON_ENC16
	bool

config REED_SOLOMON_DEC16
	bool

#
# BCH support is selected if needed
#
config BCH
	tristate

config BCH_CONST_PARAMS
	bool
	help
	  Drivers may select this option to force specific constant
	  values for parameters 'm' (Galois field order) and 't'
	  (error correction capability). Those specific values must
	  be set by declaring default values for symbols BCH_CONST_M
	  and BCH_CONST_T.
	  Doing so will enable extra compiler optimizations,
	  improving encoding and decoding performance up to 2x for
	  usual (m,t) values (typically such that m*t < 200).
	  When this option is selected, the BCH library supports
	  only a single (m,t) configuration. This is mainly useful
	  for NAND flash board drivers requiring known, fixed BCH
	  parameters.

config BCH_CONST_M
	int
	range 5 15
	help
	  Constant value for Galois field order 'm'. If 'k' is the
	  number of data bits to protect, 'm' should be chosen such
	  that (k + m*t) <= 2**m - 1.
	  Drivers should declare a default value for this symbol if
	  they select option BCH_CONST_PARAMS.

config BCH_CONST_T
	int
	help
	  Constant value for error correction capability in bits 't'.
	  Drivers should declare a default value for this symbol if
	  they select option BCH_CONST_PARAMS.

#
# Textsearch support is select'ed if needed
#
config TEXTSEARCH
	bool

config TEXTSEARCH_KMP
	tristate

config TEXTSEARCH_BM
	tristate

config TEXTSEARCH_FSM
	tristate

config BTREE
	bool

config INTERVAL_TREE
	bool
	help
	  Simple, embeddable, interval-tree. Can find the start of an
	  overlapping range in log(n) time and then iterate over all
	  overlapping nodes. The algorithm is implemented as an
	  augmented rbtree.

	  See:

		Documentation/core-api/rbtree.rst

	  for more information.

config XARRAY_MULTI
	bool
	help
	  Support entries which occupy multiple consecutive indices in the
	  XArray.

config ASSOCIATIVE_ARRAY
	bool
	help
	  Generic associative array.  Can be searched and iterated over whilst
	  it is being modified.  It is also reasonably quick to search and
	  modify.  The algorithms are non-recursive, and the trees are highly
	  capacious.

	  See:

		Documentation/core-api/assoc_array.rst

	  for more information.

config HAS_IOMEM
	bool
	depends on !NO_IOMEM
	default y

config HAS_IOPORT_MAP
	bool
	depends on HAS_IOMEM && !NO_IOPORT_MAP
	default y

source "kernel/dma/Kconfig"

config SGL_ALLOC
	bool
	default n

config IOMMU_HELPER
	bool

config CHECK_SIGNATURE
	bool

config CPUMASK_OFFSTACK
	bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS
	help
	  Use dynamic allocation for cpumask_var_t, instead of putting
	  them on the stack.  This is a bit more expensive, but avoids
	  stack overflow.

config FORCE_NR_CPUS
       bool "Set number of CPUs at compile time"
       depends on SMP && EXPERT && !COMPILE_TEST
       help
         Say Yes if you have NR_CPUS set to an actual number of possible
         CPUs in your system, not to a default value. This forces the core
         code to rely on compile-time value and optimize kernel routines
         better.

config CPU_RMAP
	bool
	depends on SMP

config DQL
	bool

config GLOB
	bool
#	This actually supports modular compilation, but the module overhead
#	is ridiculous for the amount of code involved.	Until an out-of-tree
#	driver asks for it, we'll just link it directly it into the kernel
#	when required.  Since we're ignoring out-of-tree users,	there's also
#	no need bother prompting for a manual decision:
#	prompt "glob_match() function"
	help
	  This option provides a glob_match function for performing
	  simple text pattern matching.  It originated in the ATA code
	  to blacklist particular drive models, but other device drivers
	  may need similar functionality.

	  All drivers in the Linux kernel tree that require this function
	  should automatically select this option.  Say N unless you
	  are compiling an out-of tree driver which tells you that it
	  depends on this.

config GLOB_SELFTEST
	tristate "glob self-test on init"
	depends on GLOB
	help
	  This option enables a simple self-test of the glob_match
	  function on startup.	It is primarily useful for people
	  working on the code to ensure they haven't introduced any
	  regressions.

	  It only adds a little bit of code and slows kernel boot (or
	  module load) by a small amount, so you're welcome to play with
	  it, but you probably don't need it.

#
# Netlink attribute parsing support is select'ed if needed
#
config NLATTR
	bool

#
# Generic 64-bit atomic support is selected if needed
#
config GENERIC_ATOMIC64
       bool

config LRU_CACHE
	tristate

config CLZ_TAB
	bool

config IRQ_POLL
	bool "IRQ polling library"
	help
	  Helper library to poll interrupt mitigation using polling.

config MPILIB
	tristate
	select CLZ_TAB
	help
	  Multiprecision maths library from GnuPG.
	  It is used to implement RSA digital signature verification,
	  which is used by IMA/EVM digital signature extension.

config SIGNATURE
	tristate
	depends on KEYS
	select CRYPTO
	select CRYPTO_SHA1
	select MPILIB
	help
	  Digital signature verification. Currently only RSA is supported.
	  Implementation is done using GnuPG MPI library

config DIMLIB
	bool
	help
	  Dynamic Interrupt Moderation library.
	  Implements an algorithm for dynamically changing CQ moderation values
	  according to run time performance.

#
# libfdt files, only selected if needed.
#
config LIBFDT
	bool

config OID_REGISTRY
	tristate
	help
	  Enable fast lookup object identifier registry.

config UCS2_STRING
	tristate

#
# generic vdso
#
source "lib/vdso/Kconfig"

source "lib/fonts/Kconfig"

config SG_SPLIT
	def_bool n
	help
	 Provides a helper to split scatterlists into chunks, each chunk being
	 a scatterlist. This should be selected by a driver or an API which
	 whishes to split a scatterlist amongst multiple DMA channels.

config SG_POOL
	def_bool n
	help
	 Provides a helper to allocate chained scatterlists. This should be
	 selected by a driver or an API which whishes to allocate chained
	 scatterlist.

#
# sg chaining option
#

config ARCH_NO_SG_CHAIN
	def_bool n

config ARCH_HAS_PMEM_API
	bool

config MEMREGION
	bool

config ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
	bool

config ARCH_HAS_MEMREMAP_COMPAT_ALIGN
	bool

# use memcpy to implement user copies for nommu architectures
config UACCESS_MEMCPY
	bool

config ARCH_HAS_UACCESS_FLUSHCACHE
	bool

# arch has a concept of a recoverable synchronous exception due to a
# memory-read error like x86 machine-check or ARM data-abort, and
# implements copy_mc_to_{user,kernel} to abort and report
# 'bytes-transferred' if that exception fires when accessing the source
# buffer.
config ARCH_HAS_COPY_MC
	bool

# Temporary. Goes away when all archs are cleaned up
config ARCH_STACKWALK
       bool

config STACKDEPOT
	bool
	select STACKTRACE

config STACKDEPOT_ALWAYS_INIT
	bool
	select STACKDEPOT

config REF_TRACKER
	bool
	depends on STACKTRACE_SUPPORT
	select STACKDEPOT

config SBITMAP
	bool

config PARMAN
	tristate "parman" if COMPILE_TEST

config OBJAGG
	tristate "objagg" if COMPILE_TEST

endmenu

config GENERIC_IOREMAP
	bool

config GENERIC_LIB_ASHLDI3
	bool

config GENERIC_LIB_ASHRDI3
	bool

config GENERIC_LIB_LSHRDI3
	bool

config GENERIC_LIB_MULDI3
	bool

config GENERIC_LIB_CMPDI2
	bool

config GENERIC_LIB_UCMPDI2
	bool

config GENERIC_LIB_DEVMEM_IS_ALLOWED
	bool

config PLDMFW
	bool
	default n

config ASN1_ENCODER
       tristate

config POLYNOMIAL
       tristate
