##
## 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.
##

#
# 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
