##
## This file is part of the coreinfo project.
##
## Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
##

#
# For a description of the syntax of this configuration file,
# see http://lxr.linux.no/source/Documentation/kbuild/kconfig-language.txt.
#

mainmenu "coreinfo Configuration"

menu "General settings"

# TODO: Needs changes in coreinfo, won't update without keypress currently.
config SHOW_DATE_TIME
	bool "Show current date/time in the menu"
	default y
	help
	  Show the current date and time in the lower-right corner of
	  the coreinfo menu.

	  This option will increase the ELF file size by ca. 250 bytes.

config PAYLOAD_INFO_NAME
	string "Payload name"
	default "coreinfo"
	help
	  The name of this payload for use in (e.g.) Bayou.

config PAYLOAD_INFO_LISTNAME
	string "Payload menu entry name"
	default "System Information"
	help
	  The name of this payload's menu entry for use in (e.g.) Bayou.

config PAYLOAD_INFO_DESC
	string "Payload description"
	default "Display information about the system"
	help
	  The description of this payload for use in (e.g.) Bayou.

config PAYLOAD_INFO_VERSION
	string "Payload version"
	default "0.1"
	help
	  The version number of this payload.

endmenu

menu "Modules"

config MODULE_COREBOOT
	bool "Enable the coreboot module"
	default y
	help
	  This option will increase the ELF file size by ca. 2250 bytes.

config MODULE_MULTIBOOT
	bool "Enable the multiboot module"
	default y
	help
	  This option will increase the ELF file size by ca. 1790 bytes.

config MODULE_CPUINFO
	bool "Enable the cpuinfo module"
	default y
	help
	  This option will increase the ELF file size by ca. 2650 bytes.

config MODULE_PCI
	bool "Enable the PCI info module"
	default y
	help
	  This option will increase the ELF file size by ca. 1750 bytes.

config MODULE_NVRAM
	bool "Enable the NVRAM dump module"
	default y
	help
	  This option will increase the ELF file size by ca. 350 bytes.

config MODULE_BOOTLOG
	bool "Enable the coreboot bootlog module"
	default y

config MODULE_RAMDUMP
	bool "Enable the RAM dump module"
	default y

config MODULE_LAR
	bool "Enable the coreboot v3 LAR module"
	help
	  LAR support must also be enabled in libpayload.
	default n

config MODULE_CBFS
	bool "Enable the coreboot CBFS module"
	default y
	help
	  This option will increase the ELF file size by ca. 1440 bytes.

endmenu

