# Kconfig SeaBIOS configuration

mainmenu "SeaBIOS Configuration"

menu "General Features"

choice
    prompt "Build Target"
    default QEMU

    config COREBOOT
        bool "Build for coreboot"
        help
            Configure as a coreboot payload.

    config QEMU
        bool "Build for QEMU/Xen/KVM/Bochs"
        select QEMU_HARDWARE
        help
            Configure for an emulated machine (QEMU, Xen, KVM, or Bochs).

    config CSM
       bool "Build as Compatibility Support Module for EFI BIOS"
       help
           Configure to be used by EFI firmware as Compatibility Support
           module (CSM) to provide legacy BIOS services.

endchoice

    config QEMU_HARDWARE
        bool "Support hardware found on emulators (QEMU/Xen/KVM/Bochs)" if !QEMU
        default n
        help
            Support virtual hardware when the code detects it is
            running on an emulator.

    config XEN
        depends on QEMU
        bool "Support Xen HVM"
        default y
        help
            Configure to be used by xen hvmloader, for a HVM guest.

    config THREADS
        bool "Parallelize hardware init"
        default y
        help
            Support running hardware initialization in parallel.

    config RELOCATE_INIT
        bool "Copy init code to high memory"
        default y
        help
            Support relocating the one time initialization code to high memory.

    config BOOTMENU
        depends on BOOT
        bool "Bootmenu"
        default y
        help
            Support an interactive boot menu at end of post.
    config BOOTSPLASH
        depends on BOOTMENU
        bool "Graphical boot splash screen"
        default y
        help
            Support showing a graphical boot splash screen.
    config BOOTORDER
        depends on BOOT
        bool "Boot ordering"
        default y
        help
            Support controlling of the boot order via the fw_cfg/CBFS
            "bootorder" file.
    config HOST_BIOS_GEOMETRY
        depends on BOOT
        bool "Boot device bios geometry override"
        default y
        help
            Support overriding bios (logical) geometry of boot devices via the
            fw_cfg/CBFS "bios-geometry" file.

    config COREBOOT_FLASH
        depends on COREBOOT
        bool "coreboot CBFS support"
        default y
        help
            Support searching coreboot flash format.
    config LZMA
        depends on COREBOOT_FLASH
        bool "CBFS lzma support"
        default y
        help
            Support CBFS files compressed using the lzma decompression
            algorithm.
    config CBFS_LOCATION
        depends on COREBOOT_FLASH
        hex "CBFS memory end location"
        default 0
        help
            Memory address of where the CBFS data ends.  This should
            be zero for normal builds.  It may be a non-zero value if
            the CBFS filesystem is at a non-standard location (eg,
            0xffe00000 if CBFS ends 2Meg below the end of flash).

    config MULTIBOOT
        depends on COREBOOT
        bool "multiboot support"
        default y
        help
            Add multiboot header in bios.bin.raw and accept files supplied
            as multiboot modules.
    config ENTRY_EXTRASTACK
        bool "Use internal stack for 16bit interrupt entry points"
        default y
        help
            Utilize an internal stack for all the legacy 16bit
            interrupt entry points.  This reduces the amount of space
            on the caller's stack that SeaBIOS uses.  This may
            adversely impact any legacy operating systems that call
            the BIOS in 16bit protected mode.

    config MALLOC_UPPERMEMORY
        bool "Allocate memory that needs to be in first Meg above 0xc0000"
        default y
        help
            Use the "Upper Memory Block" area (0xc0000-0xf0000) for
            internal "low memory" allocations.  If this is not
            selected, the memory is instead allocated from the
            "9-segment" (0x90000-0xa0000).

    config ROM_SIZE
        int "ROM size (in KB)"
        default 0
        help
            Set the ROM size.  Say '0' here to make seabios figure the
            needed size automatically.

            Currently SeaBIOS will easily fit into 256 KB. To make it fit
            it into 128 KB (which was big enouth for a long time) you'll
            probably have to disable some featues such as xhci support.

endmenu

menu "Hardware support"
    config ATA
        depends on DRIVES
        bool "ATA controllers"
        default y
        help
            Support for IDE disk code.
    config ATA_DMA
        depends on ATA
        bool "ATA DMA"
        default n
        help
            Detect and try to use ATA bus mastering DMA controllers.
    config ATA_PIO32
        depends on ATA
        bool "ATA 32bit PIO"
        default n
        help
            Use 32bit PIO accesses on ATA (minor optimization on PCI transfers).
    config AHCI
        depends on DRIVES
        bool "AHCI controllers"
        default y
        help
            Support for AHCI disk code.
    config SDCARD
        depends on DRIVES
        bool "SD controllers"
        default y
        help
            Support for SD cards on PCI host controllers.
    config VIRTIO_BLK
        depends on DRIVES && QEMU_HARDWARE
        bool "virtio-blk controllers"
        default y
        help
            Support boot from virtio-blk storage.
    config VIRTIO_SCSI
        depends on DRIVES && QEMU_HARDWARE
        bool "virtio-scsi controllers"
        default y
        help
            Support boot from virtio-scsi storage.
    config PVSCSI
        depends on DRIVES && QEMU_HARDWARE
        bool "PVSCSI controllers"
        default y
        help
            Support boot from Paravirtualized SCSI storage. This kind of storage
            is mainly supported by VMware ESX hypervisor. It is commonly used
            to allow fast storage access by communicating directly with the
            underlying hypervisor. Enabling this type of boot will allow
            booting directly from images imported from an ESX platform,
            without the need to use slower emulation of storage controllers
            such as IDE.
    config ESP_SCSI
        depends on DRIVES && QEMU_HARDWARE
        bool "AMD PCscsi controllers"
        default y
        help
            Support boot from AMD PCscsi storage.
    config LSI_SCSI
        depends on DRIVES && QEMU_HARDWARE
        bool "lsi53c895a scsi controllers"
        default y
        help
            Support boot from qemu-emulated lsi53c895a scsi storage.
    config MEGASAS
        depends on DRIVES
        bool "LSI MegaRAID SAS controllers"
        default y
        help
            Support boot from LSI MegaRAID SAS scsi storage.
    config MPT_SCSI
        depends on DRIVES && QEMU_HARDWARE
        bool "LSI MPT Fusion controllers"
        default y
        help
            Support boot from LSI MPT Fusion scsi storage.
    config FLOPPY
        depends on DRIVES && HARDWARE_IRQ
        bool "Floppy controller"
        default y
        help
            Support floppy drive access.
    config FLASH_FLOPPY
        depends on DRIVES
        bool "Floppy images from CBFS or fw_cfg"
        default y
        help
            Support floppy images stored in coreboot flash or from
            QEMU fw_cfg.
    config NVME
        depends on DRIVES
        bool "NVMe controllers"
        default y
        help
            Support for NVMe disk code.

    config PS2PORT
        depends on KEYBOARD || MOUSE
        bool "PS/2 port"
        default y
        help
            Support PS2 ports (keyboard and mouse).

    config USB
        bool "USB"
        default y
        help
            Support USB devices.
    config USB_UHCI
        depends on USB
        bool "USB UHCI controllers"
        default y
        help
            Support USB UHCI controllers.
    config USB_OHCI
        depends on USB
        bool "USB OHCI controllers"
        default y
        help
            Support USB OHCI controllers.
    config USB_EHCI
        depends on USB
        bool "USB EHCI controllers"
        default y
        help
            Support USB EHCI controllers.
    config USB_XHCI
        depends on USB
        bool "USB XHCI controllers"
        default y
        help
            Support USB XHCI controllers.
    config USB_MSC
        depends on USB && DRIVES
        bool "USB drives"
        default y
        help
            Support USB BOT (bulk-only transport) disks.
    config USB_UAS
        depends on USB && DRIVES
        bool "UAS drives"
        default y
        help
            Support USB UAS (usb attached scsi) disks.
    config USB_HUB
        depends on USB
        bool "USB hubs"
        default y
        help
            Support USB hubs.
    config USB_KEYBOARD
        depends on USB && KEYBOARD
        bool "USB keyboards"
        default y
        help
            Support USB keyboards.
    config USB_MOUSE
        depends on USB && MOUSE
        bool "USB mice"
        default y
        help
            Support USB mice.

    config SERIAL
        bool "Serial port"
        default y
        help
            Support serial ports.  This also enables int 14 serial port calls.
    config SERCON
        bool "Serial console"
        default y
        help
            Support redirecting vga output to the serial console.
    config LPT
        bool "Parallel port"
        default y
        help
            Support parallel ports. This also enables int 17 parallel port calls.
    config RTC_TIMER
        bool "Real Time Clock (RTC) scheduling"
        depends on HARDWARE_IRQ
        default y
        help
            Support MC146818 Real Time Clock chip timer
            interrupts. This also enables int 1583 and int 1586 calls.

            Disabling this support does not disable access to the RTC
            cmos registers.

    config HARDWARE_IRQ
        bool "Hardware interrupts"
        default y
        help
            Program and support hardware interrupts using the i8259
            programmable interrupt controller (PIC).  This option must
            be enabled in order to support most boot loaders.  Only
            disable this option if running on peculiar hardware known
            not to support irq routing.

    config USE_SMM
        depends on QEMU
        bool "System Management Mode (SMM)"
        default y
        help
            Support System Management Mode (on emulators).
    config CALL32_SMM
        bool
        depends on USE_SMM
        default y
    config MTRR_INIT
        depends on QEMU
        bool "Initialize MTRRs"
        default y
        help
            Initialize the Memory Type Range Registers (on emulators).
    config PMTIMER
        bool "Support ACPI timer"
        default y
        help
            Detect and use the ACPI timer for timekeeping.
    config TSC_TIMER
        bool "Support CPU timestamp counter as timer"
        default y
        help
            Support for using the CPU timestamp counter as an internal
            timing source.
endmenu

menu "BIOS interfaces"
    config DRIVES
        bool "Drive interface"
        default y
        help
            Support int13 disk/floppy drive functions.

    config CDROM_BOOT
        depends on DRIVES
        bool "DVD/CDROM booting"
        default y
        help
            Support for booting from a CD.  (El Torito spec support.)
    config CDROM_EMU
        depends on CDROM_BOOT
        bool "DVD/CDROM boot drive emulation"
        default y
        help
            Support bootable CDROMs that emulate a floppy/harddrive.

    config PCIBIOS
        bool "PCIBIOS interface"
        default y
        help
            Support int 1a/b1 PCI BIOS calls.
    config APMBIOS
        bool "APM interface"
        default y
        help
            Support int 15/53 APM BIOS calls.
    config PNPBIOS
        bool "PnP BIOS interface"
        default y
        help
            Support PnP BIOS entry point.
    config OPTIONROMS
        bool "Option ROMS"
        default y
        help
            Support finding and running option roms during POST.
    config PMM
        depends on OPTIONROMS
        bool "PMM interface"
        default y
        help
            Support Post Memory Manager (PMM) entry point.
    config BOOT
        bool "Boot interface"
        default y
        help
            Support int 19/18 system bootup support.
    config KEYBOARD
        bool "Keyboard interface"
        default y
        help
            Support int 16 keyboard calls.
    config KBD_CALL_INT15_4F
        depends on KEYBOARD
        bool "Keyboard hook interface"
        default y
        help
            Support calling int155f on each keyboard event.
    config MOUSE
        bool "Mouse interface"
        default y
        help
            Support for int15c2 mouse calls.

    config S3_RESUME
        bool "S3 resume"
        default y
        help
            Support S3 resume handler.

    config VGAHOOKS
        bool "Hardware specific VGA helpers"
        default y
        help
            Support int 155f BIOS callbacks specific to some Intel and
            VIA on-board vga devices.

    config DISABLE_A20
        bool "Disable A20"
        default n
        help
            Disable A20 on 16bit boot.

    config WRITABLE_UPPERMEMORY
        depends on QEMU
        bool "Make unused UMB memory read/writeable."
        default n
        help
            When selected, the "Upper Memory Block" area
            (0x90000-0xa0000) that is not used for option roms will be
            made writable.  This allows the ram to be directly
            modified by programs.  However, some old DOS high memory
            managers may require the UMB region to be read-only.

    config TCGBIOS
        depends on S3_RESUME
        bool "TPM support and TCG BIOS extensions"
        default y
        help
            Provide TPM support along with TCG BIOS extensions

endmenu

menu "BIOS Tables"
    depends on QEMU
    config PIRTABLE
        bool "PIR table"
        default y
        help
            Support generation of a PIR table in 0xf000 segment.
    config MPTABLE
        bool "MPTable"
        default y
        help
            Support generation of MPTable.
    config SMBIOS
        bool "SMBIOS"
        default y
        help
            Support generation of SM BIOS tables.  This is also
            sometimes called DMI.
    config ACPI
        bool "ACPI"
        default y
        help
            Support generation of ACPI tables.
    config ACPI_DSDT
        bool "Include default ACPI DSDT"
        default y
        depends on ACPI
        help
            Include default DSDT ACPI table in BIOS.
            Required for QEMU 1.3 and older.
            This option can be disabled for QEMU 1.4 and newer
            to save some space in the ROM file.
            If unsure, say Y.
    config FW_ROMFILE_LOAD
        bool "Load BIOS tables from ROM files"
        depends on QEMU_HARDWARE
        default y
        help
            Support loading BIOS firmware tables from ROM files.
            At the moment, only ACPI tables can be loaded in this way.
            Required for QEMU 1.7 and newer.
            This option can be disabled for QEMU 1.6 and older
            to save some space in the ROM file.
            If unsure, say Y.
    config ACPI_PARSE
        bool "Include ACPI DSDT parser."
        default y
        help
            Support parsing ACPI DSDT for device probing.
            Needed to find virtio-mmio devices.
            If unsure, say Y.
endmenu

source vgasrc/Kconfig

menu "Debugging"
    config DEBUG_LEVEL
        int "Debug level"
        default 1
        help
            Control how verbose debug output is.  The higher the
            number, the more verbose SeaBIOS will be.

            Set to zero to disable debugging.

    config DEBUG_SERIAL
        depends on DEBUG_LEVEL != 0
        bool "Serial port debugging"
        default n
        help
            Send debugging information to serial port.
    config DEBUG_SERIAL_PORT
        depends on DEBUG_SERIAL
        hex "Serial port base address"
        default 0x3f8
        help
            Base port for serial - generally 0x3f8, 0x2f8, 0x3e8, or 0x2e8.
   config DEBUG_SERIAL_MMIO
        depends on DEBUG_LEVEL != 0 && !DEBUG_SERIAL
        bool "Serial port debugging via memory mapped IO"
        default n
        help
            Send debugging information to serial port mapped in memory.
   config DEBUG_SERIAL_MEM_ADDRESS
        depends on DEBUG_SERIAL_MMIO
        hex "Serial port memory mapped IO address"
        help
            On some chipsets the serial port is memory mapped, in those cases
            provide the 32 bit address. E.g. 0xFEDC6000 for the AMD Kern
            (a.k.a Hudson UART).

    config DEBUG_IO
        depends on QEMU_HARDWARE && DEBUG_LEVEL != 0
        bool "Special IO port debugging"
        default y
        help
            Some emulators or hypervisors provide with a way to output debug
            information by outputing strings in a special port present in the
            IO space.

    config DEBUG_COREBOOT
        depends on COREBOOT && DEBUG_LEVEL != 0
        bool "coreboot cbmem debug logging"
        default y
        help
            Send debugging information to the coreboot cbmem console buffer.
            Needs CONFIG_CONSOLE_CBMEM in coreboot.  You can read the log
            after boot using 'cbmem -c'.  Only 32bit code (basically every-
            thing before booting the OS) writes to the log buffer.

endmenu
