##
##
## 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 y if CHROMEOS
	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.

config CHROMEOS
	bool "ChromeOS Options"
	default n
	help
	  Select configuration defaults appropriate for ChromeOS boards.

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 LTO
	bool "Use link time optimization (LTO)"
	default n
	depends on COMPILER_GCC
	help
	  Compile with link time optimization. This can often decrease the
	  final binary size, but may increase compilation time.

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_MOCK
        bool "Mock architecture (for unit tests)"
        help
          This enables the mock architecture (for unit tests) that is intended
          to be used for testing purposes, to either test payloads or libpayload itself.
          It provides necessary headers, but requires mocking (providing implementation
          for) arch-specific functions.

endchoice

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

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 0x00100000 if ARCH_X86
	default 0x00000000 if ARCH_MOCK
	help
	  This is the base address for the payload.

	  If unsure, set to 0x00100000 on x86,
	  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 if !CHROMEOS

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

source "libcbfs/Kconfig"

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).

source "vboot/Kconfig"

endmenu

menu "Console Options"

config SKIP_CONSOLE_INIT
	bool "Skip initializing the consoles at startup"
	default y if CHROMEOS
	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 if ARCH_X86

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 QCS405_SERIAL_CONSOLE
	bool "QCS405 SOC compatible serial port driver"
	depends on SERIAL_CONSOLE
	default n

config QUALCOMM_QUPV3_SERIAL_CONSOLE
	bool "Qualcomm QUPV3 serial port driver"
	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 if !CHROMEOS

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 y if CHROMEOS
	default n
	help
	  Say Y here if coreboot switched to a graphics mode and
	  your payload wants to use it.

config COREBOOT_VIDEO_CENTERED
	bool "Center a classic 80x25 console on bigger screens"
	depends on COREBOOT_VIDEO_CONSOLE
	help
	  Say 'y' here if your payload is hardcoded to a 80x25 console. Otherwise
	  its output would look squeezed into the upper-left corner of the screen.

config FONT_SCALE_FACTOR
	int "Scale factor for the included font"
	depends on GEODELX_VIDEO_CONSOLE || COREBOOT_VIDEO_CONSOLE
	default 0
	help
	  By default (value of 0), the scale factor is automatically
	  calculated to ensure at least 130 columns (when possible).

config CBGFX_FAST_RESAMPLE
	bool "CBGFX: use faster (less pretty) image scaling"
	default n
	help
	  When payloads use the CBGFX library to draw .BMPs on the screen,
	  they will be resampled with an anti-aliasing filter to scale to the
	  requested output size. The default implementation should normally be
	  fast enough, but if desired this option can make it about 50-100%
	  faster at the cost of quality. (It changes the 'a' parameter in the
	  Lanczos resampling algorithm from 3 to 2.)

	  Only affects .BMPs that aren't already provided at the right size.

config PC_I8042
	bool "A common PC i8042 driver"
	default y if PC_KEYBOARD || PC_MOUSE
	default n
	help
	  To be used by PC_KEYBOARD and PC_MOUSE.

config PC_MOUSE
	bool "Allow input from a PC mouse"
	default n if CHROMEOS
	default y if ARCH_X86 # uses IO
	default n
	help
	  PS/2 mouse driver on top of PC_I8042.

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

config PC_KEYBOARD_TRANSLATION
	bool "Enable or Disable translation in PC keyboard set 2 on exit"
	depends on PC_KEYBOARD
	default y

endmenu

menu "Drivers"

config PCI
	bool "Support for PCI devices"
	default y if ARCH_X86
	default n

config PCI_IO_OPS
	bool "Support for PCI devices with port IO"
	depends on PCI && IO_ADDRESS_SPACE
	default y if ARCH_X86
	default n

config PCIE_MEDIATEK
	bool "Support for PCIe devices on MediaTek platforms"
	depends on PCI && !PCI_IO_OPS
	default n

config PCIE_QCOM
	bool "Support for PCIe devices on Qualcomm platforms"
	depends on PCI && !PCI_IO_OPS
	default n

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

config MOUSE_CURSOR
	bool "Support for mouse cursor handling"
	default y if PC_MOUSE
	default n
	help
	  Provides a common interface for various mouse cursor drivers.
	  * Supports up to 32 buttons.
	  * Supports 3 axis mice.
	  * Applies simple cursor acceleration.
	  * Allows to set cursor acceleration and cursor speed.

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 if !CHROMEOS

source "drivers/timer/Kconfig"
source "drivers/storage/Kconfig"
source "drivers/usb/Kconfig"

endmenu

menu "Debugging"
	depends on DEVELOPER

config DEBUG_MALLOC
	bool "Debug memory allocator"
	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/x86/Kconfig"
source "arch/mock/Kconfig"
