##
## This file is part of the libpayload project.
##
## Copyright (C) 2008 Advanced Micro Devices, Inc.
## Copyright (C) 2008 coresystems GmbH
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
## 1. Redistributions of source code must retain the above copyright
##    notice, this list of conditions and the following disclaimer.
## 2. Redistributions in binary form must reproduce the above copyright
##    notice, this list of conditions and the following disclaimer in the
##    documentation and/or other materials provided with the distribution.
## 3. The name of the author may not be used to endorse or promote products
##    derived from this software without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
## ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##

mainmenu "Libpayload Configuration"

menu "Generic Options"

config GPL
	bool "GPLv2-licensed Options"
	default n
	help
	  Prompt for options that will build code licensed under the GNU General
	  Public License (version 2). This will subject the whole payload to the
	  terms of this license (including its provision to release all sources,
	  please see the LICENSE_GPL file for details).

config EXPERIMENTAL
	bool "Experimental Options"
	default n
	help
	  Prompt for experimental functionality. Attention: This is not likely
	  to work without problems

config DEVELOPER
	bool "Developer Options"
	default n
	help
	  Prompt for developer options. These options are only interesting for
	  libpayload developers.

choice
	prompt "Compiler to use"
	default COMPILER_GCC
	help
	  This option allows you to select the compiler.

config COMPILER_GCC
	bool "GCC"
	help
	  Use the GNU Compiler Collection (GCC).

config COMPILER_LLVM_CLANG
	bool "LLVM/clang"
	help
	  Use LLVM/clang.

endchoice

config REMOTEGDB
	bool "Remote GDB stub"
	default n
	depends on GPL
	help
	  Enable Remote GDB debugging support.

config CHROMEOS
	bool "ChromeOS specific features"
	default n
	help
	  Enable ChromeOS specific features.

endmenu

menu "Architecture Options"

choice
        prompt "Target Architecture"
        default ARCH_X86

config ARCH_ARM
        bool "ARM"
        help
          Support the ARM architecture

config ARCH_X86
        bool "x86"
        help
          Support the x86 architecture

config ARCH_ARM64
        bool "ARM64"
        help
          Support the ARM64 architecture

config ARCH_MIPS
	bool "MIPS"
	help
	  Support the MIPS architecture

endchoice

config MEMMAP_RAM_ONLY
	bool "Only consider RAM entries in memory map for further processing"
	default n

config MULTIBOOT
	bool "Multiboot header support"
	depends on ARCH_X86
	default y

endmenu

menu "Standard Libraries"

config LIBC
	bool "Enable C library support"
	default y

config CURSES
	bool "Build a curses library"
	default y

choice
	prompt "Curses implementation"
	default PDCURSES
	depends on CURSES

config TINYCURSES
	bool "TinyCurses"
	help
	  TinyCurses was the first curses implementation for libpayload.
	  It features low memory consumption, static allocation of larger
	  data structures (so few or no memory allocation calls) and a
	  reduced feature set.

config PDCURSES
	bool "PDCurses"
	help
	  libpayload's PDCurses port provides a full features curses
	  implementation, including libpanel, libmenu and libform (which
	  are taken from ncurses).
	  It requires more system resources, in particularily heap memory.

endchoice

config CBFS
	bool "CBFS support"
	default y
	help
	  CBFS is the archive format of coreboot

config LZMA
	bool "LZMA decoder"
	default y
	help
	  LZMA decoder implementation, usable eg. by CBFS,
	  but also externally.

config LZ4
	bool "LZ4 decoder"
	default y
	help
	  Decoder implementation for the LZ4 compression algorithm.
	  Adds standalone functions (CBFS support coming soon).
endmenu

menu "Console Options"

config SKIP_CONSOLE_INIT
	bool "Skip initializing the consoles at startup"
	default n
	help
	  Normally, libpayload will initialize console input/output on startup
	  before the payload itself gets control. This option disables that
	  behavior and leaves console initialization up to the payload.

config CBMEM_CONSOLE
	bool "Send output to the in memory CBMEM console"
	default y

config SERIAL_CONSOLE
	bool "See output on the serial port console"
	default y

config 8250_SERIAL_CONSOLE
	bool "8250-compatible serial port driver (including IO and MMIO)"
	depends on SERIAL_CONSOLE
	default y

config S5P_SERIAL_CONSOLE
	bool "Exynos SOC, S5P compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config IPQ806X_SERIAL_CONSOLE
	bool "IPQ806x SOC compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config BG4CD_SERIAL_CONSOLE
	bool "Serial port driver for Marvell's BG4CD"
	depends on SERIAL_CONSOLE
	default n

config PL011_SERIAL_CONSOLE
	bool "PL011 compatible serial port driver"
	depends on 8250_SERIAL_CONSOLE
	default n

config SERIAL_IOBASE
	## This default is currently not used on non-x86 systems.
	hex "Default I/O base for the serial port (default 0x3f8)"
	depends on SERIAL_CONSOLE && ARCH_X86
	default 0x3f8

config SERIAL_SET_SPEED
	bool "Override the serial console baud rate"
	default n
	depends on SERIAL_CONSOLE

config SERIAL_BAUD_RATE
	int "Serial console baud rate (default 115200)"
	depends on SERIAL_SET_SPEED
	default 115200

config SERIAL_ACS_FALLBACK
	bool "Use plain ASCII characters for ACS"
	default n
	depends on SERIAL_CONSOLE
	help
	  The alternate character set (ACS) is used for drawing lines and
	  displaying a couple of other special graphics characters.  The
	  ACS characters generally look good on screen, but can be difficult
	  to cut and paste from a terminal window to a text editor.

	  Say 'y' here if you want to always use plain ASCII characters to
	  approximate the appearance of ACS characters on the serial port
	  console.

config VIDEO_CONSOLE
	bool "See output on a video console"
	default y

config VGA_VIDEO_CONSOLE
	bool "VGA video console driver"
	depends on ARCH_X86 && VIDEO_CONSOLE
	default y

config GEODELX_VIDEO_CONSOLE
	bool "Geode LX video console driver"
	depends on ARCH_X86 && VIDEO_CONSOLE
	default n

config COREBOOT_VIDEO_CONSOLE
	bool "coreboot video console driver"
	depends on VIDEO_CONSOLE && !GEODELX_VIDEO_CONSOLE
	default n
	help
	  Say Y here if coreboot switched to a graphics mode and
	  your payload wants to use it.

config PC_KEYBOARD
	bool "Allow input from a PC keyboard"
	default y if ARCH_X86 # uses IO
	default n

config PC_KEYBOARD_LAYOUT_US
	bool "English (US) keyboard layout"
	depends on PC_KEYBOARD
	default y

config PC_KEYBOARD_LAYOUT_DE
	bool "German keyboard layout"
	depends on PC_KEYBOARD
	default n

endmenu

menu "Drivers"

config PCI
	bool "Support for PCI devices"
	depends on ARCH_X86 # for now
	default y

config NVRAM
	bool "Support for reading/writing NVRAM bytes"
	depends on ARCH_X86 # for now
	default y

config RTC_PORT_EXTENDED_VIA
	bool "Extended RTC ports are 0x74/0x75"
	default n
	help
	  For recent chipsets with 256 NVRAM bytes, you have to access the
	  upper 128 bytes (128-255) using two different I/O ports,
	  usually 0x72/0x73.

	  On some chipsets this can be a different set of ports, though.
	  The VIA VT8237R for example only recognizes the ports 0x74/0x75
	  for accessing the high 128 NVRAM bytes (as seems to be the case for
	  multiple VIA chipsets).

	  If you want to read or write CMOS bytes on computers with one of
	  these chipsets, say 'y' here.

config SPEAKER
	bool "Support for PC speaker"
	depends on ARCH_X86
	default y

config STORAGE
	bool "Support for storage devices"
	default y
	help
	  Select this option if you want support for storage devices (like
	  hard drives, memory sticks or optical drives).

config STORAGE_64BIT_LBA
	bool "Use 64-bit integers to address sectors"
	depends on STORAGE
	default n
	help
	  If this is selected, sectors will be addressed by an 64-bit integer.
	  Select this to support LBA-48 for ATA drives.

config STORAGE_ATA
	bool "Support ATA drives (i.e. hard drives)"
	depends on STORAGE
	default y
	help
	  Select this option if you want support for ATA storage devices
	  (i.e. hard drives).

config STORAGE_ATAPI
	bool "Support ATAPI drives (i.e. optical drives)"
	depends on STORAGE
	default y
	select STORAGE_ATA
	help
	  Select this option if you want support for ATAPI storage devices
	  (i.e. optical drives like CD or DVD drives).

config STORAGE_AHCI
	bool "Support for AHCI host controllers"
	depends on STORAGE && (STORAGE_ATA || STORAGE_ATAPI) && PCI
	default y
	help
	  Select this option if you want support for SATA controllers in
	  AHCI mode.

config STORAGE_AHCI_ONLY_TESTED
	bool "Only enable tested controllers"
	depends on STORAGE_AHCI
	default y
	help
	  If this option is selected only AHCI controllers which are known
	  to work will be used.

config TIMER_RDTSC
	bool
	default y
	depends on ARCH_X86

choice
	prompt "Timer driver"
	default TIMER_NONE
	depends on !ARCH_X86

config TIMER_NONE
	bool "None"
	help
	  The timer driver is provided by the payload itself.

config TIMER_MCT
	bool "Exynos MCT"

config TIMER_TEGRA_1US
	bool "Tegra 1us"

config TIMER_IPQ806X
	bool "Timer for ipq806x platforms"

config TIMER_RK
	bool "Timer for Rockchip"

config TIMER_BG4CD
	bool "Marvell BG4CD"

config TIMER_CYGNUS
	bool "Timer for Cygnus"

config TIMER_IMG_PISTACHIO
	bool "Timer for IMG Pistachio"

config TIMER_MTK
	bool "Timer for MediaTek MT8173"

endchoice

config TIMER_MCT_HZ
	int "Exynos MCT frequency"
	depends on TIMER_MCT
	default 24000000

config TIMER_MCT_ADDRESS
	hex "Exynos MCT base address"
	depends on TIMER_MCT
	default 0x101c0000

config TIMER_RK_ADDRESS
	hex "Rockchip timer base address"
	depends on TIMER_RK
	default 0xff810020

config TIMER_TEGRA_1US_ADDRESS
	hex "Tegra u1s timer base address"
	depends on TIMER_TEGRA_1US
	default 0x60005010

config IPQ806X_TIMER_FREQ
	int "Hardware timer frequency"
	default 32000
	depends on TIMER_IPQ806X
	help
	  IPQ hardware presently provides a single timer running at 32KHz, a
	  finer granulariry timer is available but is not yet enabled.

config IPQ806X_TIMER_REG
	hex "Timer register address"
	default 0x0200A008
	depends on TIMER_IPQ806X
	help
	  Address of the register to read a free running timer value.

config IPROC_PERIPH_GLB_TIM_REG_BASE
	hex "Cygnus timer base address"
	depends on TIMER_CYGNUS
	default 0x19020200

config TIMER_MTK_HZ
	int "MediaTek GPT frequency"
	depends on TIMER_MTK
	default 13000000
	help
	  Clock frequency of MediaTek General Purpose Timer.

config TIMER_MTK_ADDRESS
	hex "MTK GPT register address"
	depends on TIMER_MTK
	default 0x10008048
	help
	  Address of GPT4's counter register to read the FREERUN-mode timer value.

config USB
	bool "USB Support"
	default n

config USB_UHCI
	bool "Support for USB UHCI controllers"
	depends on USB && ARCH_X86
	help
	  Select this option if you are going to use USB 1.1 on an Intel based
	  system.

config USB_OHCI
	bool "Support for USB OHCI controllers"
	depends on USB
	help
	  Select this option if you are going to use USB 1.1 on a non-Intel based
	  system.

config USB_EHCI
	bool "Support for USB EHCI controllers"
	depends on USB
	help
	  Select this option if you want to use USB 2.0

config USB_XHCI
	bool "Support for USB xHCI controllers"
	depends on USB
	help
	  Select this option if you want to use USB 3.0
	  NOTE: This option is not (fully) implemented yet

config USB_XHCI_MTK_QUIRK
	bool "Support for USB xHCI controllers on MTK SoC"
	depends on USB_XHCI
	help
	  Select this option if you want to use USB 3.0 on MTK platform.

config USB_DWC2
	bool "Support for USB DesignWare HCD controllers"
	depends on USB
	help
	  Select this option if you want to use DesignWare USB 2.0 host controller

config USB_HID
	bool "Support for USB keyboards"
	depends on USB
	default y
	help
	  Select this option if you want to use devices complying to the
	  USB HID (Human Interface Device) standard. Such devices are for
	  example keyboards and mice. Currently only keyboards are supported.
	  Say Y here unless you know exactly what you are doing.

config USB_HUB
	bool "Support for USB hubs"
	depends on USB
	default y
	help
	  Select this option if you want to compile in support for USB hubs.
	  Say Y here unless you know exactly what you are doing.

config USB_EHCI_HOSTPC_ROOT_HUB_TT
	bool "Support for USB EHCI ROOT HUB that has TT"
	depends on USB_EHCI
	default n
	help
	  Select this option if USB EHCI root hub supports TT (Transaction
	  Translator).
	  To support this TT feature we read port-speed from non-standard
	  register HOSTPC (offset 84h of Operational Register base).

config USB_MSC
	bool "Support for USB storage"
	depends on USB
	default y
	help
	  Select this option if you want to compile in support for USB mass
	  storage devices (USB memory sticks, hard drives, CDROM/DVD drives)
	  Say Y here unless you know exactly what you are doing.

config USB_GEN_HUB
	bool
	default n if (!USB_HUB && !USB_XHCI)
	default y if (USB_HUB || USB_XHCI)
config USB_PCI
	bool "Auto-scan PCI bus for USB host controllers"
	depends on USB
	default y if ARCH_X86
	default n

config UDC
	bool "USB device mode support"
	default n
	help
	  Select this option to add support for running as
	  a USB device.

config UDC_CI
	bool "ChipIdea driver for USB device mode"
	depends on UDC
	default n
	help
	  Select this option to add the driver for ChipIdea
	  USB device controller.

config UDC_DWC2
	bool "Designware driver for USB device mode"
	depends on UDC
	default n
	help
	  Select this option to add the driver for Designware
	  USB device controller.

endmenu

menu "Debugging"
	depends on DEVELOPER

config DEBUG_MALLOC
	bool "Debug memory allocator"
	depends on USB
	default n
	help
	  Select this option if you want to debug the memory allocator. This
	  option logs all uses of the following functions:

	    void free(void *ptr);
	    void *malloc(size_t size);
	    void *calloc(size_t nmemb, size_t size);
	    void *realloc(void *ptr, size_t size);
	    void *memalign(size_t align, size_t size);

	  Say N here unless you are debugging memory allocator problems.

endmenu

config BIG_ENDIAN
	default n
	bool

config LITTLE_ENDIAN
	default n
	bool

# Whether the target system has an IO address space.
config IO_ADDRESS_SPACE
	default n
	bool

source "arch/arm/Kconfig"
source "arch/arm64/Kconfig"
source "arch/mips/Kconfig"
source "arch/x86/Kconfig"
