# Kconfig SeaBIOS VGA BIOS configuration

menu "VGA ROM"
    choice
        prompt "VGA Hardware Type"
        default NO_VGABIOS

        config NO_VGABIOS
            bool "None"
            help
                Do not build a VGA BIOS.

        config VGA_STANDARD_VGA
            depends on QEMU
            bool "QEMU/Bochs Original IBM 256K VGA"
            select VGA_STDVGA_PORTS
            help
                Build basic VGA BIOS support (pre Super-VGA) for use
                on emulators.

        config VGA_CIRRUS
            depends on QEMU
            bool "QEMU/Bochs Cirrus SVGA"
            select VGA_STDVGA_PORTS
            help
                Build support for Cirrus VGA emulation found on QEMU
                and Bochs emulators.  This is for emulators; it is not
                intended for use on real Cirrus hardware.

        config VGA_ATI
            depends on QEMU
            bool "QEMU ATI SVGA"
            select VGA_STDVGA_PORTS
            help
                Build support for ATI VGA emulation found on QEMU
                and emulators.  This is for emulators; it is not
                intended for use on real ATI hardware.

        config VGA_BOCHS
            depends on QEMU
            bool "QEMU/Bochs VBE SVGA"
            select VGA_STDVGA_PORTS
            help
                Build support for Bochs DISPI interface (a custom VBE
                protocol) found on QEMU and Bochs emulators.

        config VGA_GEODEGX2
            bool "GeodeGX2"
            select VGA_STDVGA_PORTS
            help
                Build support for Geode GX2 vga.

        config VGA_GEODELX
            bool "GeodeLX"
            select VGA_STDVGA_PORTS
            help
                Build support for Geode LX vga.

        config VGA_COREBOOT
            depends on COREBOOT
            bool "coreboot linear framebuffer"
            select VGA_EMULATE_TEXT
            help
                Build support for a vgabios wrapper around video
                devices initialized using coreboot native vga init.

        config DISPLAY_BOCHS
            depends on QEMU
            bool "qemu bochs-display support"
            select VGA_EMULATE_TEXT
            help
                Build support for the qemu bochs-display device, which
                is basically qemu stdvga without the legacy vga
                emulation, supporting only 16+32 bpp VESA video modes
                in a linear framebuffer.  So this uses cbvga text mode
                emulation.

                The bochs-display device is available in qemu
                v3.0+. The vgabios works with the qemu stdvga too (use
                "qemu -device VGA,romfile=/path/to/vgabios.bin")".

        config VGA_RAMFB
            depends on QEMU
            bool "qemu ramfb"
            select VGA_EMULATE_TEXT
            help
                qemu ram framebuffer support (-device ramfb).

    endchoice

    choice
        depends on VGA_BOCHS
        prompt "bochs vga variant"
        default VGA_BOCHS_STDVGA

        config VGA_BOCHS_STDVGA
            bool "qemu stdvga / bochs svga"

        config VGA_BOCHS_VMWARE
            bool "qemu vmware svga"

        config VGA_BOCHS_QXL
            bool "qemu qxl vga"

        config VGA_BOCHS_VIRTIO
            bool "qemu virtio vga"

    endchoice

    choice
        depends on VGA_GEODEGX2 || VGA_GEODELX
        prompt "Output Mode"
        default VGA_OUTPUT_CRT

        config VGA_OUTPUT_CRT
            bool "CRT"
            help
                Use CRT for output.

        config VGA_OUTPUT_PANEL
            bool "Flat Panel"
            help
                Use flat panel for output.

        config VGA_OUTPUT_CRT_PANEL
            bool "CRT and Flat Panel"
            help
                Use CRT and flat panel for output.
    endchoice

    config BUILD_VGABIOS
        bool
        default !NO_VGABIOS

    config VGA_STDVGA_PORTS
        bool
    config VGA_EMULATE_TEXT
        bool
        help
            Support emulating text mode features when only a
            framebuffer is available.

    config VGA_FIXUP_ASM
        depends on BUILD_VGABIOS
        bool "Fixup assembler to work with broken emulators"
        default y
        help
            This option will cause the build to attempt to avoid
            certain x86 machine instructions that are known to confuse
            some emulators.  In particular, it works around
            deficiencies in the Windows vgabios emulator and the
            x86emu vgabios emulator (frequently used in Xorg).

    config VGA_ALLOCATE_EXTRA_STACK
        depends on BUILD_VGABIOS
        bool "Allocate an internal stack for 16bit interrupt entry point"
        default y
        help
            Attempt to allocate (via BIOS PMM call) an internal stack
            for the legacy 16bit 0x10 interrupt entry point.  This
            reduces the amount of space on the caller's stack that
            SeaVGABIOS uses.

    config VGA_EXTRA_STACK_SIZE
        int
        default 512

    config VGA_VBE
        depends on BUILD_VGABIOS
        bool "Video BIOS Extensions (VBE)"
        default y
        help
            Support VBE.

    config VGA_PCI
        depends on BUILD_VGABIOS && !VGA_COREBOOT
        bool "PCI ROM Headers"
        default y
        help
            Build PCI ROM headers so the vga rom can be extracted from
            a PCI device.

    config OVERRIDE_PCI_ID
        depends on VGA_PCI
        bool "Override PCI Vendor and Device IDs"
        help
            Specify specific values for the PCI Vendor and Device IDs.

    config VGA_VID
        depends on VGA_PCI
        hex
        prompt "PCI Vendor ID" if OVERRIDE_PCI_ID
        default 0x1013 if VGA_CIRRUS
        default 0x1002 if VGA_ATI
        default 0x1234 if VGA_BOCHS_STDVGA
        default 0x15ad if VGA_BOCHS_VMWARE
        default 0x1b36 if VGA_BOCHS_QXL
        default 0x1af4 if VGA_BOCHS_VIRTIO
        default 0x100b if VGA_GEODEGX2
        default 0x1022 if VGA_GEODELX
        default 0x1234 if DISPLAY_BOCHS
        default 0x0000
        help
            Vendor ID for the PCI ROM

    config VGA_DID
        depends on VGA_PCI
        hex
        prompt "PCI Vendor ID" if OVERRIDE_PCI_ID
        default 0x00b8 if VGA_CIRRUS
        default 0x5159 if VGA_ATI
        default 0x1111 if VGA_BOCHS_STDVGA
        default 0x0405 if VGA_BOCHS_VMWARE
        default 0x0100 if VGA_BOCHS_QXL
        default 0x1050 if VGA_BOCHS_VIRTIO
        default 0x0030 if VGA_GEODEGX2
        default 0x2081 if VGA_GEODELX
        default 0x1111 if DISPLAY_BOCHS
        default 0x0000
        help
            Device ID for the PCI ROM
endmenu
