##
##
## 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 "Chrome OS Options"
	default n
	help
	  Select configuration defaults appropriate for Chrome OS 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

config USE_MARCH_586
	bool "Use march=586 qualifier to build"
	default n
	depends on ARCH_X86
	help
	  Allow a platform or processor to select to be compiled using
	  the '-march=i586' option instead of the typical '-march=i686'

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 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"
