config PAYLOAD_BUILD_SEABIOS
	bool

if PAYLOAD_SEABIOS

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

endif

if PAYLOAD_BUILD_SEABIOS

choice
	prompt "SeaBIOS version"
	default SEABIOS_STABLE

config SEABIOS_STABLE
	bool "1.16.2"
	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_HARDWARE_IRQ
	prompt "Hardware Interrupts"
	default y
	bool
	help
	  Program and support hardware interrupts using the i8259
	  programmable interrupt controller (PIC).  Deselected by
	  boards which would otherwise hang at the boot menu (eg,
	  google/rambi).

config SEABIOS_VGA_COREBOOT
	prompt "Include generated option rom that implements legacy VGA BIOS compatibility"
	default y if !VENDOR_EMULATION
	default y if COREDOOM_SECONDARY_PAYLOAD
	depends on !VGA_ROM_RUN && (VGA_TEXT_FRAMEBUFFER || LINEAR_FRAMEBUFFER)
	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 SEABIOS_ADD_SERCON_PORT_FILE
	prompt "Add SeaBIOS sercon-port file to CBFS"
	default n
	bool
	help
	  Select this option to enable SeaBIOS' VGA adapter emulation
	  on serial port.

config SEABIOS_SERCON_PORT_ADDR
	hex "SeaBIOS sercon-port base address"
	depends on SEABIOS_ADD_SERCON_PORT_FILE
	default TTYS0_BASE
	help
	  Set this field to the IO address of a serial port for SeaBIOS' VGA
	  adapter emulation.

	  By default primary console UART defined by TTYS0_BASE is used.

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
