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

#
# 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_CBFS
	bool "Enable the coreboot CBFS module"
	default y
	help
	  This option will increase the ELF file size by ca. 1440 bytes.

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

endmenu
