1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Library configuration
4#
5
6config BINARY_PRINTF
7	def_bool n
8
9menu "Library routines"
10
11config RAID6_PQ
12	tristate
13
14config RAID6_PQ_BENCHMARK
15	bool "Automatically choose fastest RAID6 PQ functions"
16	depends on RAID6_PQ
17	default y
18	help
19	  Benchmark all available RAID6 PQ functions on init and choose the
20	  fastest one.
21
22config LINEAR_RANGES
23	tristate
24
25config PACKING
26	bool "Generic bitfield packing and unpacking"
27	default n
28	help
29	  This option provides the packing() helper function, which permits
30	  converting bitfields between a CPU-usable representation and a
31	  memory representation that can have any combination of these quirks:
32	    - Is little endian (bytes are reversed within a 32-bit group)
33	    - The least-significant 32-bit word comes first (within a 64-bit
34	      group)
35	    - The most significant bit of a byte is at its right (bit 0 of a
36	      register description is numerically 2^7).
37	  Drivers may use these helpers to match the bit indices as described
38	  in the data sheets of the peripherals they are in control of.
39
40	  When in doubt, say N.
41
42config BITREVERSE
43	tristate
44
45config HAVE_ARCH_BITREVERSE
46	bool
47	default n
48	help
49	  This option enables the use of hardware bit-reversal instructions on
50	  architectures which support such operations.
51
52config ARCH_HAS_STRNCPY_FROM_USER
53	bool
54
55config ARCH_HAS_STRNLEN_USER
56	bool
57
58config GENERIC_STRNCPY_FROM_USER
59	def_bool !ARCH_HAS_STRNCPY_FROM_USER
60
61config GENERIC_STRNLEN_USER
62	def_bool !ARCH_HAS_STRNLEN_USER
63
64config GENERIC_NET_UTILS
65	bool
66
67source "lib/math/Kconfig"
68
69config NO_GENERIC_PCI_IOPORT_MAP
70	bool
71
72config GENERIC_PCI_IOMAP
73	bool
74
75config GENERIC_IOMAP
76	bool
77	select GENERIC_PCI_IOMAP
78
79config STMP_DEVICE
80	bool
81
82config ARCH_USE_CMPXCHG_LOCKREF
83	bool
84
85config ARCH_HAS_FAST_MULTIPLIER
86	bool
87
88config ARCH_USE_SYM_ANNOTATIONS
89	bool
90
91config INDIRECT_PIO
92	bool "Access I/O in non-MMIO mode"
93	depends on ARM64
94	help
95	  On some platforms where no separate I/O space exists, there are I/O
96	  hosts which can not be accessed in MMIO mode. Using the logical PIO
97	  mechanism, the host-local I/O resource can be mapped into system
98	  logic PIO space shared with MMIO hosts, such as PCI/PCIe, then the
99	  system can access the I/O devices with the mapped-logic PIO through
100	  I/O accessors.
101
102	  This way has relatively little I/O performance cost. Please make
103	  sure your devices really need this configure item enabled.
104
105	  When in doubt, say N.
106
107config INDIRECT_IOMEM
108	bool
109	help
110	  This is selected by other options/architectures to provide the
111	  emulated iomem accessors.
112
113config INDIRECT_IOMEM_FALLBACK
114	bool
115	depends on INDIRECT_IOMEM
116	help
117	  If INDIRECT_IOMEM is selected, this enables falling back to plain
118	  mmio accesses when the IO memory address is not a registered
119	  emulated region.
120
121source "lib/crypto/Kconfig"
122
123config LIB_MEMNEQ
124	bool
125
126config CRC_CCITT
127	tristate "CRC-CCITT functions"
128	help
129	  This option is provided for the case where no in-kernel-tree
130	  modules require CRC-CCITT functions, but a module built outside
131	  the kernel tree does. Such modules that use library CRC-CCITT
132	  functions require M here.
133
134config CRC16
135	tristate "CRC16 functions"
136	help
137	  This option is provided for the case where no in-kernel-tree
138	  modules require CRC16 functions, but a module built outside
139	  the kernel tree does. Such modules that use library CRC16
140	  functions require M here.
141
142config CRC_T10DIF
143	tristate "CRC calculation for the T10 Data Integrity Field"
144	select CRYPTO
145	select CRYPTO_CRCT10DIF
146	help
147	  This option is only needed if a module that's not in the
148	  kernel tree needs to calculate CRC checks for use with the
149	  SCSI data integrity subsystem.
150
151config CRC64_ROCKSOFT
152	tristate "CRC calculation for the Rocksoft model CRC64"
153	select CRC64
154	select CRYPTO
155	select CRYPTO_CRC64_ROCKSOFT
156	help
157	  This option provides a CRC64 API to a registered crypto driver.
158	  This is used with the block layer's data integrity subsystem.
159
160config CRC_ITU_T
161	tristate "CRC ITU-T V.41 functions"
162	help
163	  This option is provided for the case where no in-kernel-tree
164	  modules require CRC ITU-T V.41 functions, but a module built outside
165	  the kernel tree does. Such modules that use library CRC ITU-T V.41
166	  functions require M here.
167
168config CRC32
169	tristate "CRC32/CRC32c functions"
170	default y
171	select BITREVERSE
172	help
173	  This option is provided for the case where no in-kernel-tree
174	  modules require CRC32/CRC32c functions, but a module built outside
175	  the kernel tree does. Such modules that use library CRC32/CRC32c
176	  functions require M here.
177
178config CRC32_SELFTEST
179	tristate "CRC32 perform self test on init"
180	depends on CRC32
181	help
182	  This option enables the CRC32 library functions to perform a
183	  self test on initialization. The self test computes crc32_le
184	  and crc32_be over byte strings with random alignment and length
185	  and computes the total elapsed time and number of bytes processed.
186
187choice
188	prompt "CRC32 implementation"
189	depends on CRC32
190	default CRC32_SLICEBY8
191	help
192	  This option allows a kernel builder to override the default choice
193	  of CRC32 algorithm.  Choose the default ("slice by 8") unless you
194	  know that you need one of the others.
195
196config CRC32_SLICEBY8
197	bool "Slice by 8 bytes"
198	help
199	  Calculate checksum 8 bytes at a time with a clever slicing algorithm.
200	  This is the fastest algorithm, but comes with a 8KiB lookup table.
201	  Most modern processors have enough cache to hold this table without
202	  thrashing the cache.
203
204	  This is the default implementation choice.  Choose this one unless
205	  you have a good reason not to.
206
207config CRC32_SLICEBY4
208	bool "Slice by 4 bytes"
209	help
210	  Calculate checksum 4 bytes at a time with a clever slicing algorithm.
211	  This is a bit slower than slice by 8, but has a smaller 4KiB lookup
212	  table.
213
214	  Only choose this option if you know what you are doing.
215
216config CRC32_SARWATE
217	bool "Sarwate's Algorithm (one byte at a time)"
218	help
219	  Calculate checksum a byte at a time using Sarwate's algorithm.  This
220	  is not particularly fast, but has a small 256 byte lookup table.
221
222	  Only choose this option if you know what you are doing.
223
224config CRC32_BIT
225	bool "Classic Algorithm (one bit at a time)"
226	help
227	  Calculate checksum one bit at a time.  This is VERY slow, but has
228	  no lookup table.  This is provided as a debugging option.
229
230	  Only choose this option if you are debugging crc32.
231
232endchoice
233
234config CRC64
235	tristate "CRC64 functions"
236	help
237	  This option is provided for the case where no in-kernel-tree
238	  modules require CRC64 functions, but a module built outside
239	  the kernel tree does. Such modules that use library CRC64
240	  functions require M here.
241
242config CRC4
243	tristate "CRC4 functions"
244	help
245	  This option is provided for the case where no in-kernel-tree
246	  modules require CRC4 functions, but a module built outside
247	  the kernel tree does. Such modules that use library CRC4
248	  functions require M here.
249
250config CRC7
251	tristate "CRC7 functions"
252	help
253	  This option is provided for the case where no in-kernel-tree
254	  modules require CRC7 functions, but a module built outside
255	  the kernel tree does. Such modules that use library CRC7
256	  functions require M here.
257
258config LIBCRC32C
259	tristate "CRC32c (Castagnoli, et al) Cyclic Redundancy-Check"
260	select CRYPTO
261	select CRYPTO_CRC32C
262	help
263	  This option is provided for the case where no in-kernel-tree
264	  modules require CRC32c functions, but a module built outside the
265	  kernel tree does. Such modules that use library CRC32c functions
266	  require M here.  See Castagnoli93.
267	  Module will be libcrc32c.
268
269config CRC8
270	tristate "CRC8 function"
271	help
272	  This option provides CRC8 function. Drivers may select this
273	  when they need to do cyclic redundancy check according CRC8
274	  algorithm. Module will be called crc8.
275
276config XXHASH
277	tristate
278
279config AUDIT_GENERIC
280	bool
281	depends on AUDIT && !AUDIT_ARCH
282	default y
283
284config AUDIT_ARCH_COMPAT_GENERIC
285	bool
286	default n
287
288config AUDIT_COMPAT_GENERIC
289	bool
290	depends on AUDIT_GENERIC && AUDIT_ARCH_COMPAT_GENERIC && COMPAT
291	default y
292
293config RANDOM32_SELFTEST
294	bool "PRNG perform self test on init"
295	help
296	  This option enables the 32 bit PRNG library functions to perform a
297	  self test on initialization.
298
299#
300# compression support is select'ed if needed
301#
302config 842_COMPRESS
303	select CRC32
304	tristate
305
306config 842_DECOMPRESS
307	select CRC32
308	tristate
309
310config ZLIB_INFLATE
311	tristate
312
313config ZLIB_DEFLATE
314	tristate
315	select BITREVERSE
316
317config ZLIB_DFLTCC
318	def_bool y
319	depends on S390
320	prompt "Enable s390x DEFLATE CONVERSION CALL support for kernel zlib"
321	help
322	 Enable s390x hardware support for zlib in the kernel.
323
324config LZO_COMPRESS
325	tristate
326
327config LZO_DECOMPRESS
328	tristate
329
330config LZ4_COMPRESS
331	tristate
332
333config LZ4HC_COMPRESS
334	tristate
335
336config LZ4_DECOMPRESS
337	tristate
338
339config ZSTD_COMPRESS
340	select XXHASH
341	tristate
342
343config ZSTD_DECOMPRESS
344	select XXHASH
345	tristate
346
347source "lib/xz/Kconfig"
348
349#
350# These all provide a common interface (hence the apparent duplication with
351# ZLIB_INFLATE; DECOMPRESS_GZIP is just a wrapper.)
352#
353config DECOMPRESS_GZIP
354	select ZLIB_INFLATE
355	tristate
356
357config DECOMPRESS_BZIP2
358	tristate
359
360config DECOMPRESS_LZMA
361	tristate
362
363config DECOMPRESS_XZ
364	select XZ_DEC
365	tristate
366
367config DECOMPRESS_LZO
368	select LZO_DECOMPRESS
369	tristate
370
371config DECOMPRESS_LZ4
372	select LZ4_DECOMPRESS
373	tristate
374
375config DECOMPRESS_ZSTD
376	select ZSTD_DECOMPRESS
377	tristate
378
379#
380# Generic allocator support is selected if needed
381#
382config GENERIC_ALLOCATOR
383	bool
384
385#
386# reed solomon support is select'ed if needed
387#
388config REED_SOLOMON
389	tristate
390
391config REED_SOLOMON_ENC8
392	bool
393
394config REED_SOLOMON_DEC8
395	bool
396
397config REED_SOLOMON_ENC16
398	bool
399
400config REED_SOLOMON_DEC16
401	bool
402
403#
404# BCH support is selected if needed
405#
406config BCH
407	tristate
408
409config BCH_CONST_PARAMS
410	bool
411	help
412	  Drivers may select this option to force specific constant
413	  values for parameters 'm' (Galois field order) and 't'
414	  (error correction capability). Those specific values must
415	  be set by declaring default values for symbols BCH_CONST_M
416	  and BCH_CONST_T.
417	  Doing so will enable extra compiler optimizations,
418	  improving encoding and decoding performance up to 2x for
419	  usual (m,t) values (typically such that m*t < 200).
420	  When this option is selected, the BCH library supports
421	  only a single (m,t) configuration. This is mainly useful
422	  for NAND flash board drivers requiring known, fixed BCH
423	  parameters.
424
425config BCH_CONST_M
426	int
427	range 5 15
428	help
429	  Constant value for Galois field order 'm'. If 'k' is the
430	  number of data bits to protect, 'm' should be chosen such
431	  that (k + m*t) <= 2**m - 1.
432	  Drivers should declare a default value for this symbol if
433	  they select option BCH_CONST_PARAMS.
434
435config BCH_CONST_T
436	int
437	help
438	  Constant value for error correction capability in bits 't'.
439	  Drivers should declare a default value for this symbol if
440	  they select option BCH_CONST_PARAMS.
441
442#
443# Textsearch support is select'ed if needed
444#
445config TEXTSEARCH
446	bool
447
448config TEXTSEARCH_KMP
449	tristate
450
451config TEXTSEARCH_BM
452	tristate
453
454config TEXTSEARCH_FSM
455	tristate
456
457config BTREE
458	bool
459
460config INTERVAL_TREE
461	bool
462	help
463	  Simple, embeddable, interval-tree. Can find the start of an
464	  overlapping range in log(n) time and then iterate over all
465	  overlapping nodes. The algorithm is implemented as an
466	  augmented rbtree.
467
468	  See:
469
470		Documentation/core-api/rbtree.rst
471
472	  for more information.
473
474config XARRAY_MULTI
475	bool
476	help
477	  Support entries which occupy multiple consecutive indices in the
478	  XArray.
479
480config ASSOCIATIVE_ARRAY
481	bool
482	help
483	  Generic associative array.  Can be searched and iterated over whilst
484	  it is being modified.  It is also reasonably quick to search and
485	  modify.  The algorithms are non-recursive, and the trees are highly
486	  capacious.
487
488	  See:
489
490		Documentation/core-api/assoc_array.rst
491
492	  for more information.
493
494config HAS_IOMEM
495	bool
496	depends on !NO_IOMEM
497	default y
498
499config HAS_IOPORT_MAP
500	bool
501	depends on HAS_IOMEM && !NO_IOPORT_MAP
502	default y
503
504source "kernel/dma/Kconfig"
505
506config SGL_ALLOC
507	bool
508	default n
509
510config IOMMU_HELPER
511	bool
512
513config CHECK_SIGNATURE
514	bool
515
516config CPUMASK_OFFSTACK
517	bool "Force CPU masks off stack" if DEBUG_PER_CPU_MAPS
518	help
519	  Use dynamic allocation for cpumask_var_t, instead of putting
520	  them on the stack.  This is a bit more expensive, but avoids
521	  stack overflow.
522
523config CPU_RMAP
524	bool
525	depends on SMP
526
527config DQL
528	bool
529
530config GLOB
531	bool
532#	This actually supports modular compilation, but the module overhead
533#	is ridiculous for the amount of code involved.	Until an out-of-tree
534#	driver asks for it, we'll just link it directly it into the kernel
535#	when required.  Since we're ignoring out-of-tree users,	there's also
536#	no need bother prompting for a manual decision:
537#	prompt "glob_match() function"
538	help
539	  This option provides a glob_match function for performing
540	  simple text pattern matching.  It originated in the ATA code
541	  to blacklist particular drive models, but other device drivers
542	  may need similar functionality.
543
544	  All drivers in the Linux kernel tree that require this function
545	  should automatically select this option.  Say N unless you
546	  are compiling an out-of tree driver which tells you that it
547	  depends on this.
548
549config GLOB_SELFTEST
550	tristate "glob self-test on init"
551	depends on GLOB
552	help
553	  This option enables a simple self-test of the glob_match
554	  function on startup.	It is primarily useful for people
555	  working on the code to ensure they haven't introduced any
556	  regressions.
557
558	  It only adds a little bit of code and slows kernel boot (or
559	  module load) by a small amount, so you're welcome to play with
560	  it, but you probably don't need it.
561
562#
563# Netlink attribute parsing support is select'ed if needed
564#
565config NLATTR
566	bool
567
568#
569# Generic 64-bit atomic support is selected if needed
570#
571config GENERIC_ATOMIC64
572       bool
573
574config LRU_CACHE
575	tristate
576
577config CLZ_TAB
578	bool
579
580config IRQ_POLL
581	bool "IRQ polling library"
582	help
583	  Helper library to poll interrupt mitigation using polling.
584
585config MPILIB
586	tristate
587	select CLZ_TAB
588	help
589	  Multiprecision maths library from GnuPG.
590	  It is used to implement RSA digital signature verification,
591	  which is used by IMA/EVM digital signature extension.
592
593config SIGNATURE
594	tristate
595	depends on KEYS
596	select CRYPTO
597	select CRYPTO_SHA1
598	select MPILIB
599	help
600	  Digital signature verification. Currently only RSA is supported.
601	  Implementation is done using GnuPG MPI library
602
603config DIMLIB
604	bool
605	help
606	  Dynamic Interrupt Moderation library.
607	  Implements an algorithm for dynamically changing CQ moderation values
608	  according to run time performance.
609
610#
611# libfdt files, only selected if needed.
612#
613config LIBFDT
614	bool
615
616config OID_REGISTRY
617	tristate
618	help
619	  Enable fast lookup object identifier registry.
620
621config UCS2_STRING
622	tristate
623
624#
625# generic vdso
626#
627source "lib/vdso/Kconfig"
628
629source "lib/fonts/Kconfig"
630
631config SG_SPLIT
632	def_bool n
633	help
634	 Provides a helper to split scatterlists into chunks, each chunk being
635	 a scatterlist. This should be selected by a driver or an API which
636	 whishes to split a scatterlist amongst multiple DMA channels.
637
638config SG_POOL
639	def_bool n
640	help
641	 Provides a helper to allocate chained scatterlists. This should be
642	 selected by a driver or an API which whishes to allocate chained
643	 scatterlist.
644
645#
646# sg chaining option
647#
648
649config ARCH_NO_SG_CHAIN
650	def_bool n
651
652config ARCH_HAS_PMEM_API
653	bool
654
655config MEMREGION
656	bool
657
658config ARCH_HAS_MEMREMAP_COMPAT_ALIGN
659	bool
660
661# use memcpy to implement user copies for nommu architectures
662config UACCESS_MEMCPY
663	bool
664
665config ARCH_HAS_UACCESS_FLUSHCACHE
666	bool
667
668# arch has a concept of a recoverable synchronous exception due to a
669# memory-read error like x86 machine-check or ARM data-abort, and
670# implements copy_mc_to_{user,kernel} to abort and report
671# 'bytes-transferred' if that exception fires when accessing the source
672# buffer.
673config ARCH_HAS_COPY_MC
674	bool
675
676# Temporary. Goes away when all archs are cleaned up
677config ARCH_STACKWALK
678       bool
679
680config STACKDEPOT
681	bool
682	select STACKTRACE
683
684config STACKDEPOT_ALWAYS_INIT
685	bool
686	select STACKDEPOT
687
688config STACK_HASH_ORDER
689	int "stack depot hash size (12 => 4KB, 20 => 1024KB)"
690	range 12 20
691	default 20
692	depends on STACKDEPOT
693	help
694	 Select the hash size as a power of 2 for the stackdepot hash table.
695	 Choose a lower value to reduce the memory impact.
696
697config REF_TRACKER
698	bool
699	depends on STACKTRACE_SUPPORT
700	select STACKDEPOT
701
702config SBITMAP
703	bool
704
705config PARMAN
706	tristate "parman" if COMPILE_TEST
707
708config OBJAGG
709	tristate "objagg" if COMPILE_TEST
710
711endmenu
712
713config GENERIC_IOREMAP
714	bool
715
716config GENERIC_LIB_ASHLDI3
717	bool
718
719config GENERIC_LIB_ASHRDI3
720	bool
721
722config GENERIC_LIB_LSHRDI3
723	bool
724
725config GENERIC_LIB_MULDI3
726	bool
727
728config GENERIC_LIB_CMPDI2
729	bool
730
731config GENERIC_LIB_UCMPDI2
732	bool
733
734config GENERIC_LIB_DEVMEM_IS_ALLOWED
735	bool
736
737config PLDMFW
738	bool
739	default n
740
741config ASN1_ENCODER
742       tristate
743
744config POLYNOMIAL
745       tristate
746