##
## 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 MEMMAP_RAM_ONLY
	bool "Only consider RAM entries in memory map for further processing"
	default n

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 MULTIBOOT
	bool "Multiboot header support"
	depends on ARCH_X86
	default y

config HEAP_SIZE
	int "Heap size"
	default 131072
	help
	  This is the heap size (malloc'able size) available
	  to the payload.

	  If unsure, set to 131072 (128K)

config STACK_SIZE
	int "Stack size"
	default 16384
	help
	  This is the stack size available to the payload.

	  If unsure, set to 16384 (16K)

config BASE_ADDRESS
	hex "Base address"
	default 0x04000000 if ARCH_ARM
	default 0x80100000 if ARCH_ARM64
	default 0x00000000 if ARCH_MIPS
	default 0x00100000 if ARCH_X86
	help
	  This is the base address for the payload.

	  If unsure, set to 0x00100000 on x86, 0x00000000 on MIPS,
	  0x04000000 on ARM or 0x80100000 on ARM64.

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 IPQ40XX_SERIAL_CONSOLE
	bool "IPQ40xx 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_ARMADA38X
        bool "Timer for armada38x platforms"
	help
	  This is the timer driver for marvell armada38x
	  platforms.

config TIMER_IPQ40XX
	bool "Timer for ipq40xx platforms"
	help
	  This is the timer driver for QCA IPQ40xx based
	  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 ARMADA38X_TIMER_FREQ
        int "Hardware timer frequency"
        depends on TIMER_ARMADA38X
        default 25000000

config ARMADA38X_TIMER_REG
        hex "Timer register address"
        default 0xF1020314
        depends on TIMER_ARMADA38X

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 y

config USB_UHCI
	bool "Support for USB UHCI controllers"
	depends on USB && ARCH_X86
	default y
	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
	default y
	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
	default y
	help
	  Select this option if you want to use USB 2.0

config USB_XHCI
	bool "Support for USB xHCI controllers"
	depends on USB
	default y
	help
	  Select this option if you want to use USB 3.0

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

config IO_ADDRESS_SPACE
	default n
	bool
	help
	  This option is turned on if the target system has a separate
	  IO address space. This is typically only the case on x86.

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