##
## Copyright 2012 Google Inc.  All rights reserved.
##
## 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

config EC_SOFTWARE_SYNC
	bool "Enable EC software sync"
	default n
	help
	  EC software sync is a mechanism where the AP helps the EC verify its
	  firmware similar to how vboot verifies the main system firmware. This
	  option selects whether depthcharge should support EC software sync.

config MAX_EC_DEV_IDX
	int "Maximum EC device index"
	default 1

config VIRTUAL_DEV_SWITCH
	bool "Virtual developer switch support"
	default n
	help
	  Whether this platform has a virtual developer switch.

config PHYSICAL_REC_SWITCH
	bool "Physical recovery switch is present"
	default n
	help
	  Informs vboot that a physical recovery switch is present

config OPROM_MATTERS
	bool "Video option ROM matters"
	default n
	help
	  Whether the video option ROM has run matters on this platform.

config MOCK_TPM
	bool "Mock the TPM in vboot (TURN OFF BEFORE RELEASE)"
	default n
	help
	  Make vboot pretend that all TPM accesses and checks are successful
	  without actually talking to the TPM. This option can be used during
	  development, or when the current TPM is known to be broken somehow.
	  THIS SHOULD NOT BE LEFT ON FOR PRODUCTION DEVICES.

config DISABLE_LEGACY_BOOT
	bool "Disable the legacy boot feature"
	default n

choice
	prompt "Type of nonvolatile storage"
	default NV_STORAGE_FAKE
	help
	  Where depthcharge should keep vboot's nonvolatile storage.

config NV_STORAGE_CMOS
	bool "CMOS"
	depends on ARCH_X86
	select DRIVER_MISC_CMOS
	help
	  The nonvolatile data is stored in CMOS.

config NV_STORAGE_DISK
	bool "Fixed disk"
	help
	  The nonvolatile storage is stored on a fixed disk. The first fixed
	  disk will be used. To avoid unexpected behavior, there should only
	  be one fixed disk in the system.

config NV_STORAGE_CROS_EC
	bool "ChromeOS EC"
	help
	  The nonvolatile data is stored by the ChromeOS EC.

config NV_STORAGE_FLASH
	bool "Flash"
	help
	  The nonvolatile data is stored in the same flash device with the
	  firmware, location determined by the fmap 'rw-nvram' entry.

config NV_STORAGE_GENERIC
	bool "Generic"
	help
	  The nonvolatile storage is based on the generic storage driver
	  provided by the board.

config NV_STORAGE_FAKE
	bool "Fake"
	help
	  Nonvolatile storage is simulated using RAM and is re-initialized
	  each boot.

config NV_STORAGE_UEFI
	bool "UEFI"
	help
	  Nonvolatile storage backed by UEFI's non-volatile variables.

endchoice

config NV_STORAGE_DISK_LBA
	int "Disk based nonvolatile storage LBA"
	depends on NV_STORAGE_DISK

config NV_STORAGE_DISK_OFFSET
	int "Disk based nonvolatile storage offset"
	depends on NV_STORAGE_DISK

config NV_STORAGE_DISK_SIZE
	int "Disk based nonvolatile storage size"
	depends on NV_STORAGE_DISK

choice
	prompt "Crossystem data mechanism"
	default CROSSYSTEM_STUB
	help
	  The mechanism for passing data to crossystem.

config CROSSYSTEM_STUB
	bool "stub"

config CROSSYSTEM_ACPI
	bool "ACPI"

config CROSSYSTEM_FDT
	bool "FDT"

endchoice

config VBOOT2_VERIFY_FIRMWARE
	bool "Verify firmware using vboot2"
	default n

config USB_BOOT_ON_DEV
	bool "Enable USB Boot when switching to dev"
	default n
	help
	  When swtiching to dev from normal, set the NVRAM flag which allows
	  booting from USB.
