##
## 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 OBSOLETE
	bool "Obsolete Options"
	default n
	help
	  Prompt for obsolete options. These options are for old, unsupported
	  features and are likely to go away in the future.

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

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

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 LAR
	bool "LAR support"
	default n
	depends on OBSOLETE
	help
	  LAR is the archive format of (obsolete) coreboot v3

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.
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, 16450, 16550, 16550A compatible serial port driver"
	depends on SERIAL_CONSOLE
	default y if ARCH_X86
	default n if !ARCH_X86

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

config TEGRA_SERIAL_CONSOLE
	bool "Tegra SOC compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config RK_SERIAL_CONSOLE
	bool "Rockchip SOC 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

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"
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 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_DWC2
	bool "Support for USB DesignWare HCD controllers"
	depends on USB && !USB_HID
	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_PCI
	bool "Auto-scan PCI bus for USB host controllers"
	depends on USB
	default y if ARCH_X86
	default n

config USB_GEN_HUB
	bool
	default n if (!USB_HUB && !USB_XHCI)
	default y if (USB_HUB || USB_XHCI)

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/Config.in"
