# 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 PACKING_KUNIT_TEST
	tristate "KUnit tests for packing library" if !KUNIT_ALL_TESTS
	depends on PACKING && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds KUnit tests for the packing library.

	  For more information on KUnit and unit tests in general,
	  please refer to the KUnit documentation in Documentation/dev-tools/kunit/.

	  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_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
	depends on HAS_IOPORT
	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/crc/Kconfig"
source "lib/crypto/Kconfig"

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
	select BITREVERSE

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 INTERVAL_TREE_SPAN_ITER
	bool
	depends on INTERVAL_TREE

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 CLOSURES
	bool

config HAS_IOMEM
	bool
	depends on !NO_IOMEM
	default y

config HAS_IOPORT
	bool

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
	def_bool !SMP

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
	tristate
	depends on NET
	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
	help
	  Stack depot: stack trace storage that avoids duplication

config STACKDEPOT_ALWAYS_INIT
	bool
	select STACKDEPOT
	help
	  Always initialize stack depot during early boot

config STACKDEPOT_MAX_FRAMES
	int "Maximum number of frames in trace saved in stack depot"
	range 1 256
	default 64
	depends on 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

config LWQ_TEST
	bool "Boot-time test for lwq queuing"
	help
          Run boot-time test of light-weight queuing.

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
	select CRC32
	default n

config ASN1_ENCODER
       tristate

config POLYNOMIAL
       tristate

config FIRMWARE_TABLE
	bool

config UNION_FIND
	bool

config MIN_HEAP
	bool
