if PAYLOAD_TIANOCORE

config PAYLOAD_FILE
	string "Tianocore binary"
	default "payloads/external/tianocore/tianocore/Build/UEFIPAYLOAD.fd"
	help
	  The result of a UefiPayloadPkg build

choice
	prompt "Tianocore payload"
	default TIANOCORE_UEFIPAYLOAD
	help
	  Select which type of payload Tianocore will build (default is UefiPayload)
	  UefiPayload: MrChromebox's customized fork of Tianocore which works on most
	  x86_64 devices
	  Upstream: Use upstream Tianocore payload from https://github.com/tianocore/edk2
	  CorebootPayload: MrChromebox's customized fork of the deprecated CorebootPayloadPkg
	  Tianocore build target. It may work better on some older hardware (eg, x230)
	  which does not work properly with the UefiPayloadPkg options.

config TIANOCORE_UEFIPAYLOAD
	bool "UEFIPayload"
	help
	  Select this option to build using MrChromebox's custom Tianocore fork,
	  which incorporates fixes/improvements from System 76's and 9elements' trees.

config TIANOCORE_UPSTREAM
	bool "Upstream"
	help
	  Select this option if you want to use upstream EDK2 to build Tianocore.

config TIANOCORE_COREBOOTPAYLOAD
	bool "CorebootPayload"
	help
	  Select this option to build using MrChromebox's older (now deprecated)
	  CorebootPayloadPkg-based Tianocore branch

endchoice

config TIANOCORE_REVISION_ID
	string "Insert a commit's SHA-1 or a branch name"
	help
	   The commit's SHA-1 or branch name of the revision to use. Choose "upstream/master"
	   for master branch of Tianocore release on github.

choice
	prompt "Tianocore build"
	default TIANOCORE_RELEASE
	help
	  Select whether to generate a debug or release build for
	  Tianocore; default is to generate a release build.

config TIANOCORE_DEBUG
	bool "Generate Tianocore debug build"
	help
	  Generate a debug build.

config TIANOCORE_RELEASE
	bool "Generate Tianocore release build"
	help
	  Generate a release build.

endchoice

if TIANOCORE_UEFIPAYLOAD

config TIANOCORE_CBMEM_LOGGING
	bool "Enable Tianocore logging to CBMEM"
	help
	  Select this option if you want to enable Tianocore logging to CBMEM.
	  You may want to increase the default cbmem buffer size when selecting
	  this option, especially if using a debug (vs release) build.
	  Selecting this option will increase the payload size in CBFS by ~220KB.

config TIANOCORE_BOOTSPLASH_IMAGE
	bool "Use a custom bootsplash image"
	help
	  Select this option if you have a bootsplash image that you would
	  like to be used. If this option is not selected, the default
	  coreboot logo (European Brown Hare) will used.

config TIANOCORE_BOOTSPLASH_FILE
	string "Tianocore Bootsplash path and filename"
	depends on TIANOCORE_BOOTSPLASH_IMAGE
	default "bootsplash.bmp"
	help
	  The path and filename of the file to use as graphical bootsplash
	  image. The file must be an uncompressed BMP.

	  This image will also be used as the BGRT boot image, which may
	  persist through your OS boot process, and will be displayed
	  vertically centered 38.2% from the top of the display.

	  See ACPI spec 6.3, 5.2.22 Boot Graphics Resource Table (BGRT), and
	  Microsoft's documentation on BGRT positioning:
	  Docs/Windows/Windows Drivers/Bring up guide/Boot screen components

	  Accordingly, the image used should be no taller/wider than 40% of
	  the display panel's native pixel height/width (or resolution set).

	  If an absolute path is not given, the path will assumed to be
	  relative to the coreboot root directory.

config TIANOCORE_ABOVE_4G_MEMORY
	bool "Enable above 4G memory"
	default n
	help
	  Select this option to enable Above 4G Decode. This will allow the
	  payload to use all of the memory, rather than an maximum of 4G.

	  Disabling this option, which will reserve memory above 4G, is
	  useful for bootloaders that are not fully 64-bit aware such as
	  Qubes R4.0.4 bootloader.

endif

if TIANOCORE_COREBOOTPAYLOAD

config TIANOCORE_USE_8254_TIMER
	bool "TianoCore 8254 Timer"
	help
	  Use 8254 Timer for legacy support.

endif

config TIANOCORE_BOOT_TIMEOUT
	int
	default 2
	help
	  The length of time in seconds for which the boot splash/menu prompt will be displayed.
	  For boards with an internal display, the default value of 2s is generally sufficient.
	  For boards without an internal display, a value of 5s is generally sufficient.

endif
