if PAYLOAD_SEABIOS

choice
	prompt "SeaBIOS version"
	default SEABIOS_STABLE

config SEABIOS_STABLE
	bool "1.10.1"
	help
	  Stable SeaBIOS version
config SEABIOS_MASTER
	bool "master"
	help
	  Newest SeaBIOS version
config SEABIOS_REVISION
	bool "git revision"
	help
	  Select this option if you have a specific commit or branch
	  that you want to use as the revision from which to
	  build SeaBIOS.

	  You will be able to specify the name of a branch or a commit id
	  later.

endchoice

config SEABIOS_REVISION_ID
	string "Insert a commit's SHA-1 or a branch name"
	depends on SEABIOS_REVISION
	default "origin/master"
	help
	   The commit's SHA-1 or branch name of the revision to use.

config SEABIOS_PS2_TIMEOUT
	prompt "PS/2 keyboard controller initialization timeout (milliseconds)"
	default 0
	int
	help
	  Some PS/2 keyboard controllers don't respond to commands immediately
	  after powering on. This specifies how long SeaBIOS will wait for the
	  keyboard controller to become ready before giving up.

config SEABIOS_THREAD_OPTIONROMS
	prompt "Hardware init during option ROM execution"
	default n
	bool
	help
	  Allow hardware init to run in parallel with optionrom execution.

	  This can reduce boot time, but can cause some timing
	  variations during option ROM code execution. It is not
	  known if all option ROMs will behave properly with this option.

config SEABIOS_VGA_COREBOOT
	prompt "Include generated option rom that implements legacy VGA BIOS compatibility"
	default y if !VENDOR_EMULATION
	depends on !VGA_BIOS && MAINBOARD_DO_NATIVE_VGA_INIT
	bool
	help
	  Coreboot can initialize the GPU of some mainboards.

	  After initializing the GPU, the information about it can be passed to the payload.
	  Provide an option rom that implements this legacy VGA BIOS compatibility requirement.

config PAYLOAD_CONFIGFILE
	string "SeaBIOS config file"
	default ""
	help
	  This option allows a platform to set Kconfig options for a basic
	  SeaBIOS payload.  In general, if the option is used, the default
	  would be "$(top)/src/mainboard/$(MAINBOARDDIR)/config_seabios"

config SEABIOS_BOOTORDER_FILE
	string "SeaBIOS bootorder file"
	default ""
	help
	  Add a SeaBIOS bootorder file.  From the wiki:
	  "The bootorder file may be used to configure the boot up order. The file
	  should be ASCII text and contain one line per boot method. The description
	  of each boot method follows an Open Firmware device path format. SeaBIOS
	  will attempt to boot from each item in the file - first line of the file
	  first."

	  See: https://www.coreboot.org/SeaBIOS#Configuring_boot_order

	  If used, a typical value would be:
	    $(top)/src/mainboard/$(MAINBOARDDIR)/bootorder

config PAYLOAD_FILE
	default "payloads/external/SeaBIOS/seabios/out/bios.bin.elf"

config PAYLOAD_VGABIOS_FILE
	string
	depends on SEABIOS_VGA_COREBOOT
	default "payloads/external/SeaBIOS/seabios/out/vgabios.bin"

config SEABIOS_DEBUG_LEVEL
	int "SeaBIOS debug level (verbosity)"
	default -1
	help
	  The higher the number, the more verbose SeaBIOS will be. See the table
	  below for the current values corresponding to various items as of SeaBIOS
	  version 1.10.1. Set this value to -1 to use SeaBIOS' default.

	  Output at various SeaBIOS log levels:
	  level 0  - Logging disabled
	  level 1  - Basic output, interrupts 5, 18h, 19h, 40h, SMP, PNP, PMM
	  level 2  - AHCI, Floppy, Basic ps2, interrupts 11h, 12h, 14h, 17h
	  level 3  - bootsplash, initializations, SeaBIOS VGA BIOS interrupts
	  level 4  - bios tables, more optionrom
	  level 5  - Extra bootsplash, more XHCI
	  level 6  - ATA commands, extra optionrom
	  level 7  - extra ps2 commands, more OHCI & EHCI
	  level 8  - extra malloc info, more AHCI
	  level 9  - interrupts 15h, 16h, 1ah, APM, PCI, SMIs, PCIBIOS,
	             USB-HID commands, SDcard commands, Floppy commands
	  level 10 - interrupt 13h (Drives other than floppy)
	  level 20 - interrupt 10h (Display)

comment "Using default SeaBIOS log level"
	depends on SEABIOS_DEBUG_LEVEL = -1

comment "SeaBIOS logging disabled"
	depends on SEABIOS_DEBUG_LEVEL = 0

endif
