# SPDX-License-Identifier: GPL-2.0-only
config PSTORE
	tristate "Persistent store support"
	default n
	help
	   This option enables generic access to platform level
	   persistent storage via "pstore" filesystem that can
	   be mounted as /dev/pstore.  Only useful if you have
	   a platform level driver that registers with pstore to
	   provide the data, so you probably should just go say "Y"
	   (or "M") to a platform specific persistent store driver
	   (e.g. ACPI_APEI on X86) which will select this for you.
	   If you don't have a platform persistent store driver,
	   say N.

config PSTORE_DEFAULT_KMSG_BYTES
	int "Default kernel log storage space" if EXPERT
	depends on PSTORE
	default "10240"
	help
	  Defines default size of pstore kernel log storage.
	  Can be enlarged if needed, not recommended to shrink it.

config PSTORE_COMPRESS
	bool "Pstore compression (deflate)"
	depends on PSTORE
	select ZLIB_INFLATE
	select ZLIB_DEFLATE
	default y
	help
	  Whether pstore records should be compressed before being written to
	  the backing store. This is implemented using the zlib 'deflate'
	  algorithm, using the library implementation instead of using the full
	  blown crypto API. This reduces the risk of secondary oopses or other
	  problems while pstore is recording panic metadata.

config PSTORE_CONSOLE
	bool "Log kernel console messages"
	depends on PSTORE
	help
	  When the option is enabled, pstore will log all kernel
	  messages, even if no oops or panic happened.

config PSTORE_PMSG
	bool "Log user space messages"
	depends on PSTORE
	select RT_MUTEXES
	help
	  When the option is enabled, pstore will export a character
	  interface /dev/pmsg0 to log user space messages. On reboot
	  data can be retrieved from /sys/fs/pstore/pmsg-ramoops-[ID].

	  If unsure, say N.

config PSTORE_FTRACE
	bool "Persistent function tracer"
	depends on PSTORE
	depends on FUNCTION_TRACER
	depends on DEBUG_FS
	help
	  With this option kernel traces function calls into a persistent
	  ram buffer that can be decoded and dumped after reboot through
	  pstore filesystem. It can be used to determine what function
	  was last called before a reset or panic.

	  If unsure, say N.

config PSTORE_RAM
	tristate "Log panic/oops to a RAM buffer"
	depends on PSTORE
	depends on HAS_IOMEM
	select REED_SOLOMON
	select REED_SOLOMON_ENC8
	select REED_SOLOMON_DEC8
	help
	  This enables panic and oops messages to be logged to a circular
	  buffer in RAM where it can be read back at some later point.

	  Note that for historical reasons, the module will be named
	  "ramoops.ko".

	  For more information, see Documentation/admin-guide/ramoops.rst.

config PSTORE_ZONE
	tristate
	depends on PSTORE
	help
	  The common layer for pstore/blk (and pstore/ram in the future)
	  to manage storage in zones.

config PSTORE_BLK
	tristate "Log panic/oops to a block device"
	depends on PSTORE
	depends on BLOCK
	select PSTORE_ZONE
	default n
	help
	  This enables panic and oops message to be logged to a block dev
	  where it can be read back at some later point.

	  For more information, see Documentation/admin-guide/pstore-blk.rst

	  If unsure, say N.

config PSTORE_BLK_BLKDEV
	string "block device identifier"
	depends on PSTORE_BLK
	default ""
	help
	  Which block device should be used for pstore/blk.

	  It accepts the following variants:
	  1) <hex_major><hex_minor> device number in hexadecimal representation,
	     with no leading 0x, for example b302.
	  2) /dev/<disk_name> represents the device name of disk
	  3) /dev/<disk_name><decimal> represents the device name and number
	     of partition - device number of disk plus the partition number
	  4) /dev/<disk_name>p<decimal> - same as the above, this form is
	     used when disk name of partitioned disk ends with a digit.
	  5) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
	     unique id of a partition if the partition table provides it.
	     The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
	     partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
	     filled hex representation of the 32-bit "NT disk signature", and PP
	     is a zero-filled hex representation of the 1-based partition number.
	  6) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation
	     to a partition with a known unique id.
	  7) <major>:<minor> major and minor number of the device separated by
	     a colon.

	  NOTE that, both Kconfig and module parameters can configure
	  pstore/blk, but module parameters have priority over Kconfig.

config PSTORE_BLK_KMSG_SIZE
	int "Size in Kbytes of kmsg dump log to store"
	depends on PSTORE_BLK
	default 64
	help
	  This just sets size of kmsg dump (oops, panic, etc) log for
	  pstore/blk. The size is in KB and must be a multiple of 4.

	  NOTE that, both Kconfig and module parameters can configure
	  pstore/blk, but module parameters have priority over Kconfig.

config PSTORE_BLK_MAX_REASON
	int "Maximum kmsg dump reason to store"
	depends on PSTORE_BLK
	default 2
	help
	  The maximum reason for kmsg dumps to store. The default is
	  2 (KMSG_DUMP_OOPS), see include/linux/kmsg_dump.h's
	  enum kmsg_dump_reason for more details.

	  NOTE that, both Kconfig and module parameters can configure
	  pstore/blk, but module parameters have priority over Kconfig.

config PSTORE_BLK_PMSG_SIZE
	int "Size in Kbytes of pmsg to store"
	depends on PSTORE_BLK
	depends on PSTORE_PMSG
	default 64
	help
	  This just sets size of pmsg (pmsg_size) for pstore/blk. The size is
	  in KB and must be a multiple of 4.

	  NOTE that, both Kconfig and module parameters can configure
	  pstore/blk, but module parameters have priority over Kconfig.

config PSTORE_BLK_CONSOLE_SIZE
	int "Size in Kbytes of console log to store"
	depends on PSTORE_BLK
	depends on PSTORE_CONSOLE
	default 64
	help
	  This just sets size of console log (console_size) to store via
	  pstore/blk. The size is in KB and must be a multiple of 4.

	  NOTE that, both Kconfig and module parameters can configure
	  pstore/blk, but module parameters have priority over Kconfig.

config PSTORE_BLK_FTRACE_SIZE
	int "Size in Kbytes of ftrace log to store"
	depends on PSTORE_BLK
	depends on PSTORE_FTRACE
	default 64
	help
	  This just sets size of ftrace log (ftrace_size) for pstore/blk. The
	  size is in KB and must be a multiple of 4.

	  NOTE that, both Kconfig and module parameters can configure
	  pstore/blk, but module parameters have priority over Kconfig.
